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

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

相关文档
最新文档