汇编网首页登录博客注册
masmaster的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
文章收藏

[2010-09-01 12:32] 习题3.22

设一个32位有符号数存放在DX:AX中。请写一个求其补码的程序片段。

答:

d:\MASM>type a.asm
assume  cs:code,ds:data,ss:stack
data    segment
var1    dd      -12346789h       ;32位有符号数
        org     10h              ;
var2    dd      ?                ;结果存放这里
data    ends
stack   segment stack
        dw 128 dup (0)
stack   ends
code    segment
start:
        mov ax,data
        mov ds,ax

        mov dx,word ptr var1+2   ;高16位存至DX
        mov ax,word ptr var1     ;低16位存放至AX

        neg dx                   ;对高16位求补
        sbb dx,0                 ;减去借位CF
        neg ax                   ;对低16位求补

        mov word ptr var2,ax     ;结果送至var2
        mov word ptr var2+2,dx   ;

        mov ah,4ch
        int 21h
code    ends
end     start

测试:
d:\MASM>debug a.exe
-g 1a

AX=9877  BX=0000  CX=013E  DX=EDCB  SP=0100  BP=0000  SI=0000  DI=0000
DS=14C9  ES=14B9  SS=14CB  CS=14DB  IP=001A   NV UP EI NG NZ AC PE CY
14DB:001A B44C          MOV     AH,4C
-d ds:0 1f
14C9:0000  89 67 34 12 00 00 00 00-00 00 00 00 00 00 00 00   .g4.............
14C9:0010  77 98 CB ED 00 00 00 00-00 00 00 00 00 00 00 00   w...............
-q

d:\MASM>
评论次数(0)  |  浏览次数(303)  |  类型(汇编习题集) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码