试题说明 : =============================================================================== 请编制程序prog1.asm, 其功能是:内存中连续存放着十六个10 位无符号二进制数db(9)db(8)…db(0),其存放格式均为 db(9) db(8) db(7) db(6) db(5) db(4) db(3) db(2) db(1) db(0) 0 0 0 0 0 0 │←─── 低地址字节 ───→││←──高地址字节──→│ 请判别这十六个10位二进制数是否小于等于200h;若小于等于 200h,则相应地在内存中存入01h;否则,存入00h。最后存放这十 六个10位二进制数中小于等于200h的10位无符号二进制数的个数n (n用一个字节表示)。 例如: 内存中有 48h,c0h(10位二进制数0100100011b(123h)按48h、 c0h的形式顺序存放);91h,40h(10位二进制数1001000101b(245h)按 91h、40h的形式顺序存放);80h,00h(10位二进制数1000000000b (200h)按80h、00h的形式顺序存放);… 结果为 01h,00h,01h…(共十六个字节),后跟n 部分程序已给出,其中原始数据由过程load从文件input1.dat 中读入source开始的内存单元中。运算结果要求从result开始存放, 由过程save保存到output1.dat文件中。 填空begin和end之间已给出的源程序使其完整 (空白已用横线 标出,每行空白一般只需一条指令,但采用功能相当的多条指令亦 可), 或删除begin和end之间原有的代码并自行编程来完成要求的 功能。 对程序必须进行汇编, 并与io.obj链接产生prog1.exe执行文 件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调 试中若发现整个程序中存在错误之处,请加以修改。
=============================================================================== 程序 : =============================================================================== extrn load:far,save:far n equ 16 stac segment stack db 128 dup (?) stac ends data segment source dw n dup(?) result db n+1 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,offset result mov ch,n mov cl,___ mov bx,0 mov dx,0100h
pro: mov ah,byte ptr source[bx] ; 10位无符号二进制数高八位 mov al,______________________ ; 10位无符号二进制数低二位 cmp ax,_____ jnbe c_0 mov [di],__ inc __ inc di jmp jump c_0: mov [di],dl __________________ jump: add bl,2 dec ch jnz pro mov [di],cl ; **** end **** lea dx,result ; 结果数据区首址 lea si,name1 ; 结果文件名 mov cx,n+1 ; 结果字节数 call save ; 保存结果到文件 ret start endp code ends end start =============================================================================== 所需数据 : =============================================================================== @2 input1.dat 001 ff c0 80 00 80 40 7f c0 ff 00 fa 40 fa 80 aa 40 cd 40 11 c0 00 00 31 80 31 40 66 40 66 c0 33 40 #e @3 $output1.hex 001 fffefffefffffffffffefefefefefefef612 #e
|