【任务】编程计算:W=X+Y+36-Z
说明:X、Y、Z、W均为双字长数据,各自的低十六位数和高十六位数分别存放在X、X+2、Y、Y+2、Z、Z+2的存储单元中,结果的低十六位字和高十六位字分别存放在W和W+2两个单元中。

data segment
       x dd …
       y dd …
       z dd …
       w dd …
data ends

【参考解答】

assume cs:code,ds:data

data segment
       x dd 12345678H
       y dd 0FB1413H
       z dd 3762B2BH
       w dd ?
data ends

code segment
 start:mov ax,data
       mov ds,ax

       mov ax,x      ;ax中存放和的低16位
       add ax,y
       mov bx,x+2    ;bx中存放和的高16位
       adc bx,y+2
       add ax,36
       adc bx,0
       sub ax,z
       sbb bx,z+2

       mov w,ax     ;存放结果
       mov w+2,bx

       mov ax, 4C00H
       int 21H
code ends
     end start

注意:本程序在编译时,会出现一堆警告。(1)想想为什么?(2)可以忽略这些警告继续连接,得到可执行程序。在Debug中观察机器指令,注意取数据的地址是否正确。