用汇编语言求补码

谁写个汇编程序来求补码啊?
原来是根据JNC或者JNZ判断的,还是谢谢啦

加10分帮你写
DATAS SEGMENT
HEXST DB '0123456789ABCDEF','$'
STR2 DB '===>NEG:','$'
ENTER DB 0DH,0AH,'$'
R0 DB 11111111B
R1 DB ?
DATAS ENDS

STACKS SEGMENT
db 500 dup(?)
STACKS ENDS

CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV DL,R0
TEST DL,80H ;看最高位是否是1
JZ NEXT ;如果是正数
NEG DL
NEXT:
MOV R1,DL ;保存到R1
MOV DX,OFFSET STR2
MOV AH,09H
INT 21H
MOV DL,R1
AND DL,11110000B
MOV CL,04H
SHR DL,CL ;右移4位
MOV AL,DL
MOV BX,OFFSET HEXST
XLAT
MOV DL,AL
MOV AH,02H
INT 21H
MOV DL,R1
AND DL,00001111B
MOV BX,OFFSET HEXST
MOV AL,DL
XLAT
MOV DL,AL
MOV AH,02H
INT 21H
MOV AH,4CH
INT 21H
CODES ENDS
END START
这个是直接在内存中读取
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-10-24
DATAS SEGMENT
HEXST DB '0123456789ABCDEF','$'
STR2 DB '===>NEG:','$'
ENTER DB 0DH,0AH,'$'
R0 DB 11111111B
R1 DB ?
DATAS ENDS

STACKS SEGMENT
db 500 dup(?)
STACKS ENDS

CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV DL,R0
TEST DL,80H ;看最高位是否是1
JZ NEXT ;如果是正数
NEG DL
NEXT:
MOV R1,DL ;保存到R1
MOV DX,OFFSET STR2
MOV AH,09H
INT 21H
MOV DL,R1
AND DL,11110000B
MOV CL,04H
SHR DL,CL ;右移4位
MOV AL,DL
MOV BX,OFFSET HEXST
XLAT
MOV DL,AL
MOV AH,02H
INT 21H
MOV DL,R1
AND DL,00001111B
MOV BX,OFFSET HEXST
MOV AL,DL
XLAT
MOV DL,AL
MOV AH,02H
INT 21H
MOV AH,4CH
INT 21H
CODES ENDS
END START
但注意
第2个回答  2008-10-23
先判断是正数还是负数,正负数差别在于符号位
假设数存在AL里面
AND AL,10H 判断最高位(即符号位)为1还是为0.结果为0则是正数,结果不为0则是负数.
用JNZ转入求负数补码程序段.