| 
         试题说明 :  ===============================================================================  请编制程序prog1.asm, 其功能是: 内存中连续存放着二个有  符号字节序列a(k)和b(k)(k=0,…,9;下同),求序列c(k),c(k)=a(k)-b(k)。  c(k)以有符号字的形式按c(0),…,c(9)的顺序连续存放。  例如:  序列a(k)为30h,80h(-128d),7fh(127d),…;  序列b(k)为00h,7fh(127d),80h(-128d),…。  则结果c(k)为0030h,ff01h,00ffh,…。  部分程序已给出,其中原始数据由过程load从文件input1.dat  中读入source开始的内存单元中,运算结果要求从result开始存放,  由过程save保存到文件output1.dat中。  填空begin和end之间已给出的源程序使其完整 (空白已用横线  标出,每行空白一般只需一条指令,但采用功能相当的多条指令亦  可), 或删除begin和end之间原有的代码并自行编程来完成要求的  功能。  对程序必须进行汇编, 并与io.obj链接产生prog1.exe执行文  件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调  试中若发现整个程序中存在错误之处,请加以修改。  ===============================================================================  程序 :  ===============================================================================  extrn load:far,save:far  n equ 10  stac segment stack  db 128 dup (?)  stac ends  data segment  source db n*2 dup(?) ; 顺序存放a0,…,a9,b0,…,b9  result dw n dup(0) ; 顺序存放c0,…,c9  name0 db 'input1.dat',0  name1 db 'output1.dat',0  data ends  code segment  assume cs:code, ds:data, ss:stac  start proc far  push ds  xor ax,ax  push ax  mov ax,data  mov ds,ax  lea dx,source ; 数据区起始地址  lea si,name0 ; 原始数据文件名  mov cx,n*2 ; 字节数  call load ; 从 'input1.dat'中读取数据  ; **** begin ****  lea di,result ; 结果从result开始存放  mov cx,n  mov bx,0  mov ah,0  pro: mov al,source[bx] ; 序列ak中的一个字节  mov dh,al  ___________________ ; ck=ak-bk  jno stay ; 无溢出转stay  add dh,0 ; 有溢出  ___ dec1 ; ak为正数(为一个正数减去一个负  ; 数,结果为负数的溢出情况)转dec1  mov ah,____ ; ak为负数(为一个负数减去一个正  ; 数,结果为正数的溢出情况)将结果  ; 变为有符号字的形式(为负)  jmp _____  dec1: mov ah,00h ; 将结果变为有符号字的形式(为正)  jmp _____  stay: ____ ; al中数的符号扩展到ah,正的字节  ; 变成正的字,负的字节变成负的字  jump1: mov [di],ax  add di,2  inc bx  dec cx  jnz pro  ; **** end ****  lea dx,result ; 结果数据区首址  lea si,name1 ; 结果文件名  mov cx,n*2 ; 结果字节数  call save ; 保存结果到文件  ret  start endp  code ends  end start  ===============================================================================  所需数据 :  ===============================================================================  @2 input1.dat 001  80 c0 81 00 7f 40 3f 7f c0 81 7f 40 7f 00 7f 3f 40 80 81 9c  #e  @3 $output1.hex 001  fe007f00fd00fffffffffeff000000ffc0ff1a00a1  #e 
              |