兰陵月 发表于 2016-12-15 12:39:16

设一个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

请问这个答案是否有错误,或者可以做更多优化。和大家交流~谢谢~

我已经经过调试,结果没有错误~

兰陵月 发表于 2016-12-15 13:01:12

那些个显示的9号中断,请忽略,我是为了测试用的~

兰陵月 发表于 2016-12-15 13:02:03

@jun @康小泡 @~风介~ @人造人 @西电图图 @不二如是
{:10_266:}{:10_266:}{:10_266:}{:10_266:}{:10_266:}

人造人 发表于 2016-12-15 17:18:49

;程序名: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-16 11:12:06

人造人 发表于 2016-12-15 17:18


你这个答案是书上的标准答案,我因为对NOT指令的不熟悉,所以没选择NOT指令,选用XOR来进行操作~

结果经过调试,都是正确的~

人造人 发表于 2016-12-16 12:47:29

兰陵月 发表于 2016-12-16 11:12
你这个答案是书上的标准答案,我因为对NOT指令的不熟悉,所以没选择NOT指令,选用XOR来进行操作~

结果 ...

页: [1]
查看完整版本: 设一个32位有符号数存放在DX:AX中,请写一个求其补码的程序片段。