试题说明 : =============================================================================== 请编制程序prog1.asm, 其功能是: 内存中连续存放着二个有 符号字节序列a(k)和b(k)(k=0,…,9;下同),求序列c(k),c(k)=a(k)÷b(k)。 运算结果按序以字的形式连续存放(低字节为商,高字节为余数)。 例如: 序列a(k)为ffh(-1d), 81h(-127d),c0h(-64d),80h(-128d),…; 序列b(k)为81h(-127d),40h(64d),81h(-127d),01h(1d),…。 则结果c(k)为ff00h(00h(0d)为商、ffh(-1d)为余数),c1ffh, c000h,0080h,…。 部分程序已给出,其中原始数据由过程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(?) result dw n dup(0) 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 **** ___________________ mov di,___________ mov cx,n pro: mov al,____________ ____ ; al中数的符号扩展到ah,正的字节 ; 变成正的字,负的字节变成负的字 _____ source[bx+n] mov ____,ax add di,2 inc bx dec cx jnz pro ; **** end **** lea dx,result ; 结果数据区首址 lea si,name1 ; 结果文件名 mov cx,2*n ; 结果字节数 call save ; 保存结果到文件 ret start endp code ends end start =============================================================================== 所需数据 : =============================================================================== @2 input1.dat 001 ff 81 c0 80 00 80 40 7f 20 7f 81 40 81 01 7f 80 c0 81 01 7f #e @3 $output1.hex 001 ff00003eff3f7ffffffffeff00ff00ffdffffeff1f #e
|