当前位置:首页 > IBM_PC汇编语言程序的设计课后习题答案(第二版沈美明))
DSEG SEGMENT
MUL1 DD ? ;32位被乘数
MUL2 DW ? ;16位乘数
MUL0 DD 0,0 ;乘积用64位单元存放
DSEG ENDS
;--------------------------------------------------------------------------
CSEG SEGMENT
MAIN PROC FAR
ASSUME CS: CSEG, DS: DSEG
START: PUSH DS ;设置返回DOS
SUB AX, AX
PUSH AX
MOV AX, DSEG
MOV DS, AX ;给DS赋值
BEGIN: MOVZX EBX, MUL2 ;取乘数,并0扩展成32位
MOV EAX, MUL1 ;取被乘数
MUL EBX
MOV DWORD PTR MUL0, EAX ;保存积的低位双字
MOV DWORD PTR[MUL0+4], EDX ;保存积的高位双字
EXIT: RET
MAIN ENDP
CSEG ENDS ;以上定义代码段
;--------------------------------------------------------------------------
END START
80386作32位乘法运算用一条指令即可完成,而8086则需用部分积作两次完成。
5.26 如数据段中在首地址为MESS1的数据区存放着一个长度为35的字符串,要求把它们传送到附加段中的缓冲区MESS2中去。为提高程序执行效率,希望主要采用MOVSD指令来实现。试编写这一程序。
答:80386的程序如下:
.386
.MODEL SMALL
.STACK 100H
.DATA
MESS1 DB ‘123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ’,? ;长度为35的字符串
.FARDATA
MESS2 DB 36 DUP (?)
.CODE
START: MOV AX, DATA
MOV DS, AX ;给DS赋值
MOV AX, FARDATA
MOV ES, AX ;给ES赋值
ASSUME ES:FARDATA
BEGIN: LEA ESI, MESS1
LEA EDI, MESS2
CLD
MOV ECX, (35+1)/4 ;取传送的次数
REP MOVSD
;--------------------------------------------------------------------------
MOV AX, 4C00H ;返回DOS
INT 21H
END START
5.27 试用比例变址寻址方式编写一386程序,要求把两个64位整数相加并保存结果。
答:80386的程序如下:
.386
.MODEL SMALL
.STACK 100H
.DATA
DATA1 DQ ?
DATA2 DQ ?
.CODE
START: MOV AX, DATA
MOV DS, AX ;给DS赋值
BEGIN: MOV ESI, 0
MOV EAX, DWORD PTR DATA2[ESI*4]
ADD DWORD PTR DATA1[ESI*4], EAX
INC ESI
MOV EAX, DWORD PTR DATA2[ESI*4]
ADC DWORD PTR DATA1[ESI*4], EAX
;--------------------------------------------------------------------------
MOV AX, 4C00H ;返回DOS
INT 21H
END START
共分享92篇相关文档