微机原理实验报告
班级:XXXXX 姓名:XXXX 学号:20XXXX
XXXXX大学 信息科学与技术学院 信息工程系
实验二 汇编语言程序设计
一、实验目的:
1、熟悉MASM编译环境,了解程序的汇编方法; 2、熟悉常用汇编指令,学习汇编程序设计方法;
3、学习汇编语言的调试过程,通过调试过程认识CPU执行程序的方式。
二、实验内容:
1、将16进制数转换成ASCII码
2、求解:将程序数据段中0,1,2,...0Ah,0Bh,0Ch,0Dh,0Eh,0Fh的16个16进制数转换为对应的ASCII码,并存储在原码所在的相应地址中。
3、解答:取一个数,首先要判断该数是否大于等于10,若大于10则加上37H转化为对应的ASCII码;若小于10则加上30H。
三、程序流程图和程序代码
1、流程图
2、代码与注释 data segment
buf db 0,1,2,3,4,5,6,7,8,9,0Ah,0Bh,0Ch,0Dh,0Eh,0Fh data ends code segment
assume cs:code,ds:data; 设置代码段cs,数据段ds start:mov ax,data; 将数据存到ax中 mov ds,ax; 转存到ds中 mov cx,16; 将16赋给cx
lea si,buf; 把buf的偏移地址赋给si L2:mov al,[si]; 将si中数据移到al cmp al,10; 将al中数据与10相比 jae L1; 将16赋给cx
sub al,7h; 如果大于10加7H L1:add al,37h; 反之加37
mov [si],al; 把al转存到si inc si;si si自加 loop L2; L2循环 mov ah,4ch
int 21h; 回到dos系统 code ends end start
四、调试过程及遇到的问题
1、程序执行截图
2、调试用到的命令
mount命令、link、masm、debug -u -t -d -g -q 3、遇到的问题及解决办法
一开始不知道怎么进行程序调试,在老师讲解了 -u -t -d -g命令的用法之后,对 -u -t -d -g用法有了认识,而后就解决问题.
五、思考题
1、总结无符号条件转移指令的功能,要求更改程序,用JA指令实现相同功能。 data segment
buf db 0,1,2,3,4,5,6,7,8,9,0Ah,0Bh,0Ch,0Dh,0Eh,0Fh data ends code segment
assume cs:code,ds:data start:mov ax,data mov ds,ax mov cx,16 lea si,buf L2:mov al,[si]e cmp al,9 ja L1
sub al,7h L1:add al,37h mov [si],al inc si loop L2 mov ah,4ch
int 21h code ends end start
2、总结CMP指令和test指令的用法和区别。
cmp与sub类似,即从目的操作数减去源操作数,但sub会将运算结果送至目的操作数,而cmp不会送至目的操作数;test则与and类似,即将两个操作数进行按位“与”运算,但and将运算结果送至目的操作数,而test则不会。
cmp主要用于比较两数的关系,可以在有符号数和无符号数之间进行比较。两数相等影响ZF标志,无符号数影响CF标志,有符号数影响SF和OF标志。一般根据标志位的影响设置程序跳转,即根据不同的条件完成对应的程序片段,类似于高级语言的IF-ELSE结构。所有的有条件转移指令都可以用在这条指令之后。 3、总结有符号数转移指令JG,JL功能,叙述该指令是如何使用标志位判断有符号数的大小的?
JE/JZ JNZ/JNE JG/JNLE JGE/JNL JL/JNGE JLE/JNG
!= 不跳转 == 不跳转 <= 不跳转 < 不跳转 >= 不跳转 > 不跳转
六、心得体会
这次试验主要是对一些基本的汇编实验有一些了解,对汇编代码用法有一些
了解。在试验之后,确实是了解了一些代码的用法,也了解了dos系统一些命令的用法,比如-u,-d,-g,-t -q等等,这次试验还是很有收获的。