汇编语言实验报告 任泽
xor ax,ax
1、数值运算编程 push ax
(a)实验目的:通过编程及程序调试, mov ax,data
熟悉8086/8088运算指令及DEBUG动态调 mov ds,ax
试层序的方法。 lea bx,iarray
lea di,oarray
(b)实验内容: xor cx,cx
●无符号二进制数运算 jmp j2
j1: mov dl,al
已知有20个8位的无符号二进制数,
;如果输入的是逗号或者空格则回显,但
编一个程序完成对这些数的求和。
不存储
;并调用将数字转换为实际数据子程序
(1)程序及注释
;逗号或者空格相当于数据间的分隔符号
iarray用来存放输入数据的原始ASCII码
mov ah,2
oarray用来存放从输入数据的ASCII码转
int 21h
换而成的实际数据。
call convert
display用来做输出用。
j2: mov ah,7
int 21h
本程序可实现随意输入若干个8位无
;调用int 21hd的7号功能:输入一个字符
符号数(0——255)(以逗号或者空格间
cmp al,0dh
隔),回车确认后,程序会将它们相加,
;如果输入的是回车,表示输入结束
在下一行输出相加的结果。
je next
cmp al,','
程序开始:
je j1
stack segment stack
cmp al,' '
dw 100 dup(0)
je j1
stack ends
;如果输入的是逗号或者空格则跳转到j1
cmp al,'0'
data segment
jl j2
iarray db 100 dup(0)
cmp al,'9'
;用于存放输入的数字
jg j2
oarray db 100 dup(0)
;如果输入的不是十进制数字则不回显也
;用于存放转换过来的实际数据
不存储
ten dw 10
;要求继续输入
;转换ascii码时用到的常量
call input
lcont db 0
;如果输入的是十进制数字,则调用输入
;用来记录输入数据的个数
子程序
display db 100 dup(?)
jmp j2
;用来存放输出数字的ascii码
;输入的不是回车,则继续要求输入下一
data ends
个数字
next:call convert
code segment ;代码段
;如果输入的是回车,则将最后一个数据
main proc far
转换完成
assume cs:code,ds:data,ss:stack
;然后执行下面的程序
push ds
lea bx,oarray
1
汇编语言实验报告 任泽
lea di,lcont ;bx指回此刻要处理的数据的开头单元
xor cx,cx dec cx
mov cl,[bx] mov ax,[bx]
mov ax,cx sub ax,30h
mov cx,[di] cmp cx,0
dec cx ;如果数据时1位数,则完成转换
;如果输入的只是一个数据,则相加结束 je p
;由于20个8位无符号数相加结果可能超 loop1:mul ten
过8位,因此 inc bx
;用到整个十六位的ax寄存器进行加法运 add ax,[bx]
算,保证结果正确 sub ax,30h
;先清空cx再用cl存储[bx]和ax相加是为 loop loop1
保证每次加到ax中的数据 jmp out2
;是一个8位无符号数,而不是两个;采用((((A*10)+B)*10)+C)*10+D的方法
jz s 恢复数据
loop0:inc bx p: inc bx
push cx out2: mov [di],ax
xor cx,cx ;将转换完成的数据存储到oarray数轴
mov cl,[bx] inc di
add ax,cx mov al,[lcont]
pop cx inc al
loop loop0 mov [lcont],al
s: call show ;输入的数据个数统计加一
;调用显示子程序 ret
out0: ret convert endp
main endp
show
汇编实验实验报告(2011.5.9上传) 来自淘豆网www.taodocs.com转载请标明出处.