计算机原理与汇编语言—实验报告1,2,3
实验1:循环接收用户按键输入,将用户输入的大字母原样输出,将用户输入的小写字母转换为小写字母再输出,用户若输入数字0则退出程序,其它情况输出“error!”实验程序代码 data segment str db 'error!$'data endsstack segment para stack 'stack' db 100 dup(?)stack endscode segment assume ds:data,cs:code,ss:stackstart:mov ax,data mov ds,axagain: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 errorprint1: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 21hcode ends end start实验截图 实验总结这个实验比较简单,花费的时间也少,将我们学习的理论知识用于实践。第一次真实的体会到汇编语言的特点,以及和C++语言的区别。实验2:从键盘接收用户输入的一个正整数(0-32767之间),输出该数字的所有因子。实验程序代码 输入字符(0-9),判断合法性,减去30H,存入到数组string[]中将数组string[]里的数字,整合转换为正整数,存入变量num中求出num的因子,存入string[]中转换string[]中数据,加30H,输出ASCIIdata segmentstr db 'input data 0-32767:$'num dw 0string db 5 dup(0)data endsstack segment para stack 'stack'db 1000 dup(?)stack endscode segmentassume ds:data,cs:codestart:mov ax,datamov ds,axmov dx,offset strmov ah,09hint 21h ;显示标题mov si,0mov di,0rein:mov ah,01hint 21hcmp al,20hjz inte ;输入空格表示输入结束cmp al,30hjb exit ;不在0-9之间的退出cmp al,39h ja exitsub al,30h ;不在0-9之间的退出mov string[si],al inc sicmp si,6 jz exit ;输入位数超过5位的退出 jmp rein;*******************以下整和整数dec si ;到达这一步时,si比输入的位数大1,所以要减1inte:mov bx,nummov ax,10mul bx add al,string[di]adc ah,00hmov num,axinc di cmp di,si jb inte ;得出的整数放置于变量num中;********************以下求因子,输出mov bx,0again:mov ax,nummov dx,0 inc bxcmp bx,numja exitdiv bxcmp dx,0je tcalljmp againtcall:call tprintjmp againtprint proc near ;print子程序打印输出bxmov cx,10 mov si,4mov a