解:
.MODEL?SMALL, C .DATA CR = 13 LF = 10 Data1 DD?908976789 .CODE ;子程序Display是按十进制输出32位二进制数值SOURCE Display PROC USES AX BX CX DX SI DI SOURCE:DWORD LOCAL FLAG:BYTE ;定义一个字节类型的局部变量FLAG MOV BX, WORD PTR [SOURCE] MOV CX, WORD PTR [SOURCE+2] MOV FLAG, 0? ;FLAG=0——正数 CMP CX, 0 JGE next INC FLAG ;FLAG=1——负数 NOT BX NOT CX ADD BX, 1 ;能否用指令INC BX? ADC CX, 0 ;上四条指令把32位数CX-BX变为正数 next: XOR DI, DI ;压入堆栈字符的个数 MOV SI,10 ;用10来除 .REPEAT ;本循环把32位二进制数转换成十进制 XOR DX, DX? ;数的字符串存入堆栈之中 MOV AX, CX DIV SI MOV CX, AX MOV AX, BX DIV SI ADD DL, '0' PUSH DX INC DI MOV BX, AX .UNTIL BX==0 && CX==0 .IF FLAG==1 ;判断前面转换的数是否为负数 MOV AL, '-' ;若是,把符号'-'压入堆栈 PUSH AX INC DI .ENDIF MOV CX, DI .REPEAT ;本循环把堆栈中的字符串显示出来 POP DX MOV AH, 2 INT 21H .UNTILCXZ MOV DL, CR ;下面六条指令显示回车、换行 MOV AH, 2 INT 21H MOV DL, LF MOV AH, 2 INT 21H RET Display ENDP .STARTUP INVOKE Display, Data1 INVOKE Display, -123456789 .EXIT 0 END