打印本文 打印本文  关闭窗口 关闭窗口  
2000年计算机三级A上机试题(一)
作者:佚名  文章来源:不详  点击数  更新时间:2007/12/21 18:17:28  文章录入:杜斌  责任编辑:杜斌

试题说明 :
===============================================================================
请编制程序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,31h,61h,ffh,…;
序列b(k)为00h,01h,f1h,0ah,…。
则结果c(k)为0030h,0032h,0152h,0109h,…。
部分程序已给出, 其中原始数据由过程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 ****
mov di,___________
mov bx,__
___________________
pro: mov ah,0
mov al,source[bx+10] ; 序列bk中的一个字节
__________________________ ; ck=bk+ak
jnc jump ; 无进位转jump
__________________ ; 有进位,进位入ah
jump: mov [di],ax ; ck=bk+ak的字的形式存入result
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
ff 80 7f 00 7f 80 ff 80 81 00 ff ff 80 00 81 00 00 81 fe ff
#e
@3 $output1.hex 001
01fe80fe00fffffffffe7fff00fffefe80fe00ff7f
#e
打印本文 打印本文  关闭窗口 关闭窗口