计算机原理与汇编语言—实验报告1,2,3
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验1:
循环接收用户按键输入,将用户输入的大字母原样输出,将用户输入的小写字母转换为小写字母再输出,用户若输入数字0则退出程序,其它情况输出
data segme nt
str db 'error!$'
data ends
stack segme nt para stack 'stack'
db 100 dup⑺
stack ends
code segme nt
assume ds:data,cs:code,ss:stack
start:mov ax,data
mov ds,ax
aga in:mov ah,01h
int 21h
cmp al,'0'
je next
cmp al,'A'
jb error ;小于A的出错
cmp al,'Z'
jbe print1 ;在A,Z 之间的输出print1
cmp al,'a'
jb error ;在Z(41hH)和a(61H)之间的出错
cmp al,'z'
jbe print2 ;在a,z 之间的输出print2
jmp error
prin t1: mov dl,al
mov ah,02h
int 21h
jmp again ;循环输入,again
prin t2:mov dl,al
sub dl,20h
mov ah,02h
int 21h
jmp again ;循环输入,again
error :mov dx,offset str mov ah,09h int 21h n ext:mov ah,4ch int 21h
code ends
end start
这个实验比较简单,花费的时间也少,将我们学习的理论知识用于实践第一次真实的体会到汇编语言的特点,以及和C++语言的区别。
实验2:
从键盘接收用户输入的一个正整数(0-32767 之间),输出该数字的所有因子
data segme nt
str db 'input data 0-32767:$'
num dw 0
stri ng db 5 dup(0)
data ends
stack segme nt para stack 'stack'
db 1000 dup(?)
stack ends
code segme nt
assume ds:data,cs:code
start:mov ax,data
mov ds,ax
mov dx,offset str
mov ah,09h
int 21h ;显示标题
mov si,0
mov di,0
rein:mov ah,01h
int 21h
cmp al,20h
jz inte ;输入空格表示输入结束
cmp al,30h
jb exit ;不在0-9之间的退出
cmp al,39h
ja exit
sub al,30h ;不在0-9之间的退出
mov stri ng[si],al
inc si
cmp si,6
jz exit ;输入位数超过5位的退出
jmp rein
******************* 以下整和整
;
dec si ;到达这一步时,si比输入的位数大1,所以要减1 in te:mov bx,num
mov ax,10
mul bx
add al,stri ng[di]
adc ah,00h
mov nu m,ax
inc di
cmp di,si
jb inte ;得出的整数放置于变量num中
.******************** 以下求因子,输出
mov bx,0
aga in:mov ax,num mov dx,0 inc bx
cmp bx, num
ja exit
div bx
cmp dx,0
je tcall
jmp aga in
tcall:call tpri nt
jmp aga in
tprint proc near ;print 子程序打印输出bx
mov cx,10
mov si,4
mov ax,bx
boa1:cmp ax,10
jb boa2
xor dx,dx
div cx
or dl,30h
mov stri ng[si],dl
dec si
jmp boal
boa2:or al,30h
mov stri ng[si],al
g:mov dl,string[si] 打出输出ASCII
mov ah,2
int 21h
inc si
cmp si,5
jne g
mov dl,20h
mov ah,2
int 21h ;空格隔开每个因子ret
tpri nt endp
exit: mov ah,4ch
int 21h
code ends
end start