微机原理课后习题解答 下载本文

SHR ADD

BH, CL BH, 30H

;显示千位数

OUTPUT BH POP PUSH AND ADD

BX BX BH, 0FH BH, 30H

OUTPUT BH POP PUSH MOV SHR ADD

BX BX CL, 4 BL, CL BL, 30H

;显示百位数

OUTPUT BL POP AND ADD

BX BL, 0FH BL, 30H

;显示十位数

OUTPUT BL OUTPUT 0AH OUTPUT 0DH JMP

AGAIN

;显示个位数

INPUT PROC BEGIN: MOV MOV L: SHL SHL

BX, 0 SHL BX, 1 BX, 1

FAR CX, 4

;输入一个4位十进制数的过程

BX, 1

SHL MOV INT CMP JZ CMP JB CMP JA SUB XOR ADD LOOP RET

BX, 1 AH, 1 21H

;BX的值乘以16

;输入 ;ESC键退出

AL, 1BH DONE AL, '0' ERROR AL, '9' ERROR AL, 30H AH, AH BX, AX L

;非数字,出错

;非数字,出错

;将输入加到BX中

ERROR: LEA MOV INT JMP

AH, 9 21H BEGIN

DX, MSG3

DONE: MOV INT

21H

AH, 4CH

INPUT ENDP CODE END

7、在8086系统下,编写完整程序,实现两个32位带符号数相乘。假设被乘数存放在以字变量MUL1开始的连续4个字节中,乘数存放在以字变量MUL2开始的连续4个字节中中,相乘结果存放在以字变量RES开始的连续8个字节中。

ENDS MAIN

解:参考程序: DATA MUL1 MUL2 RES DATA CODE

SEGMENT

DW 0FFFFH,0FFFFH DW 5678H,1234H DW 4 DUP(0) ENDS SEGMENT

;被乘数 ;乘数 ;结果

ASSUME CS:CODE, DS:DATA MAIN PUSH MOV PUSH MOV MOV MOV MOV MOV MOV TEST JZ NOT NOT ADD ADC

PROC DS AX, 0 AX AX, DATA DS, AX CX, MUL1 BP, MUL1+2 SI, MUL2 DI, MUL2+2 BP, 8000H NEXT1 BP CX CX, 1 BP, 0

DI, 8000H

;乘数是否为负数

;为负数,则取反加1 ;被乘数是否为负数

FAR

NEXT1: TEST JZ NOT

NEXT2 SI

;为负数,则取反加1

NOT ADD ADC

DI SI, 1 DI, 0

NEXT2: MOV AX, SI

MUL CX MOV RES, AX

MOV RES+2, DX MOV AX, SI MUL BP ADD RES+2, AX ADC RES+4, DX MOV AX, DI MUL CX ADD RES+2, AX ADC RES+4, DX MOV AX, DI MUL BP ADD RES+4, AX ADC RES+6, DX MOV AX, MUL1+2 XOR AX, MUL2+2 JNS DONE NOT RES

NOT RES+2 NOT RES+4 NOT RES+6 ADD

RES, 1

;相乘过程

;判断被乘数和乘数是否同号 ;同号,则结果为正数,无须修改结果;不同号,则结果为负数,须取反加1