当前位置:首页 > IBM_PC汇编语言程序的设计课后习题答案(第二版沈美明))
SUB AL, ‘1’ ;是1~5吗?
JB ERROR ;小于1,错误
CMP AL, 4
JA ERROR ;大于5,错误
MOV BX, OFFSET SINGLIST
MUL AX, 4 ;(AX)=(AL)*4,每个歌曲程序的首地址占4个字节
ADD BX, AX
JMP DWORD PTR[BX] ;转去执行歌曲程序
ERROR: MOV DX, OFFSET ERRMSG
MOV AH, 09H
INT 21H ;显示错误信息
JMP BEGIN
SING1: ┇
JMP BEGIN
SING2: ┇
JMP BEGIN
SING3: ┇
JMP BEGIN
SING4: ┇
JMP BEGIN
SING5: ┇
JMP BEGIN
EXIT: RET
MAIN ENDP
CSEG ENDS ;以上定义代码段
;--------------------------------------------------------------------------
END START
5.25 试用8086的乘法指令编制一个32位数和16位数相乘的程序;再用80386的乘法指令编制一个32位数和16位数相乘的程序,并定性比较两个程序的效率。
答:8086的程序如下(假设为无符号数):
DSEG SEGMENT
MUL1 DD ? ;32位被乘数
MUL2 DW ? ;16位乘数
MUL0 DW 0,0 ,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: MOV BX, MUL2 ;取乘数
MOV AX, WORD PTR MUL1 ;取被乘数低位字
MUL BX
MOV MUL0, AX ;保存部分积低位
MOV MUL0+2, DX ;保存部分积高位
MOV AX, WORD PTR[MUL1+2] ;取被乘数高位字
MUL BX
ADD MUL0+2, AX ;部分积低位和原部分积高位相加
ADC MUL0+4, DX ;保存部分积最高位,并加上进位
EXIT: RET
MAIN ENDP
CSEG ENDS ;以上定义代码段
;--------------------------------------------------------------------------
END START
80386的程序如下(假设为无符号数):
.386
共分享92篇相关文档