设一个32位有符号数存放在DX:AX中,请写一个求其补码的程序片段。
本帖最后由 兰陵月 于 2016-12-15 12:41 编辑;程序名:TT322.ASM
;功能:设一个32位有符号数存放在DX:AX中,请写一个求其补码的程序片段
ASSUME CS:CSEG,DS:DSEG
;数据段
DSEG SEGMENT
DIWEI DW 321EH
GAOWEI DW 0CD20H
MESSAGE1 DB "THE NUMBER'S COMPLEMENT IS CD20321EH","$"
MESSAGE2 DB "THE NUMBER'S COMPLEMENT IS NEW","$"
DSEG ENDS
;代码段
CSEG SEGMENT
START: MOV AX,DSEG
MOV DS,AX
MOV DX,GAOWEI
MOV AX,DIWEI
TEST DH,10000000B
JZ OK1
JNZ OK2
OK2: XOR DX,7FFFH
XOR AX,0FFFFH
MOV GAOWEI,DX
ADD AX,1
MOV DIWEI,AX
MOV AX,GAOWEI
ADC AX,0
MOV GAOWEI,AX
MOV DX,OFFSET MESSAGE2
MOV AH,9
INT 21H
JMP OK
OK1: MOV DX,OFFSET MESSAGE1
MOV AH,9
INT 21H
JMP OK
OK: MOV AX,4C00H
INT 21H
CSEG ENDS
END START
请问这个答案是否有错误,或者可以做更多优化。和大家交流~谢谢~
我已经经过调试,结果没有错误~ 那些个显示的9号中断,请忽略,我是为了测试用的~ @jun @康小泡 @~风介~ @人造人 @西电图图 @不二如是
{:10_266:}{:10_266:}{:10_266:}{:10_266:}{:10_266:} ;程序名:TT322.ASM
;功能:设一个32位有符号数存放在DX:AX中,请写一个求其补码的程序片段
ASSUME CS:CSEG, DS:DSEG
;数据段
DSEG SEGMENT
DIWEI DW 0001H
GAOWEI DW 8000H
MESSAGE1 DB "THE NUMBER'S COMPLEMENT IS CD20321EH","$"
MESSAGE2 DB "THE NUMBER'S COMPLEMENT IS NEW","$"
DSEG ENDS
;代码段
CSEG SEGMENT
START:
MOV AX, DSEG
MOV DS, AX
MOV DX, GAOWEI
MOV AX, DIWEI
TEST DH, 10000000B
JNZ NOK
MOV DX, OFFSET MESSAGE1
MOV AH, 9
INT 21H
MOV AX, 4C00H
INT 21H
NOK:
not dx
not ax
or dx, 10000000B
add ax, 1
adc dx, 0
MOV GAOWEI, DX
MOV DIWEI, AX
MOV DX, OFFSET MESSAGE2
MOV AH, 9
INT 21H
MOV AX, 4C00H
INT 21H
CSEG ENDS
END START
人造人 发表于 2016-12-15 17:18
你这个答案是书上的标准答案,我因为对NOT指令的不熟悉,所以没选择NOT指令,选用XOR来进行操作~
结果经过调试,都是正确的~ 兰陵月 发表于 2016-12-16 11:12
你这个答案是书上的标准答案,我因为对NOT指令的不熟悉,所以没选择NOT指令,选用XOR来进行操作~
结果 ...
哦
页:
[1]