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