微机原理-实验二-汇编程序1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
微机原理实验报告
班级: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等等,这次试验还是很有收获的。