计算机原理与汇编语言—实验报告1,2,3

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档