汇编实验2.2 分支、循环程序实验

目录

实验上篇   分支程序实验

【实验要求】  

【实验具体内容】

 实验下篇   循环程序实验

【实验要求】

【实验具体内容】

【实验心得】

“4K 对齐”将成为过去

“扇区对齐”将替代“4K 对齐”


实验上篇   分支程序实验

【实验要求】  

1. 编写一个程序,把AL寄存器中的两位十六进制数显示出来。

【实验具体内容】

1.实验流程图(从实验2.2 分支程序实验和循环程序实验开始必须画流程图):

2.实验源代码:(注释后来加的,没写分号,复制需添)

CODE SEGMENT代码段

ASSUME CS:CODE段寻址伪指令ASSUME是说明将哪个逻辑段的段起始地址装入段寄存器,即将哪个逻辑段设置为当前段。此处是将名为code的段设置为当前段,将该段的起始地址存入代码段寄存器cs之中。

START:MOV AL,3EH将 3EH(十六进制)移动到AL寄存器中。AL=0011 1110

 MOV BL,AL将AL中的值复制到BL寄存器。BL指令用于带链接的程序跳转,也就是说它在进行跳转的同时,还要保存返回地址。BL起到的作用是当DL的值发生改变时,重新将值赋给DL因为AL之后要用于计算,会发生数值变化)。

MOV DL,AL将AL中的值复制到DL寄存器。DL用来之后分离高四位低四位

MOV CL,4将立即数4移动到CL寄存器,CL通常用作移位操作的计数寄存器。

SHR DL,CL将DL中的值逻辑右移CL指定的位数(这里是4位)。右移四位的目的是分离出高四位,将十六进制数的高四位移到低四位。SHR指令将目的操作数顺序右移1位或CL寄存器指定的位数DL=00000011。

CMP DL,9比较DL中的值与9

JBE NEXT1如果DL中的值小于或等于9,则跳转到NEXT1标签。Jump if Below or Equal

ADD DL,7如果DL中的值大于9(即A-F的十六进制数字),则加7以将其转换为ASCII码中的字符因为9和A隔7)

NEXT1:

ADD DL,30H将DL中的值加上30H,将其转换为ASCII码(0-9的ASCII码为30H-39H)。因为字符'0'(表示数字零的字符)的ASCII码值比数字0(作为整数值)大48。

MOV AH,2设置AH寄存器为2,这是DOS中断INT 21H的“显示字符”功能的编号。

INT 21H ;显示高位 ASCII 码调用DOS中断以显示DL中的字符

MOV DL,BLDL在运算中发现变化,所以重新把BL给DL。使DL=0011 1110

AND DL,0FH将DL中的值与0FH进行按位,保留低四位。DL=0000 1110

CMP DL,9比较DL中的值与9。

JBE NEXT2如果DL中的值小于或等于9,则跳转到NEXT2标签。

ADD DL,7如果DL中的值大于9,则加7以将其转换为ASCII码中的字符。

NEXT2:

ADD DL,30H同NEXT1

MOV AH,2

INT 21H ;显示低位 ASCII 码

MOV AH,4CH设置AH寄存器为4CH,这是DOS中断INT 21H的“程序终止”功能的编号。

INT 21H

CODE ENDS ;返回 DOS

END START

3.实验过程、相应结果(截图)并对实验进行说明和分析:

(1)将代码复制到MASM集成实验环境中,保存运行后得到结果3E,如图1.1

当然,我们也可以用记事本完成代码,另存为C盘中masm5文件夹,之后修改文件后缀位.asm

图1. 1

(2)将程序另存为C盘中masm5文件夹中,如图1.2,观察到除了asm后缀之外还有lst obj后缀文件一起存入。

图1. 2

(3)打开Dosbox,在指令区输入masm CPU22,表示在虚拟环境内运行该文件,并生成obj文件,如图1.3(不能直接输入CPU22,提示illegal command,因为没有生成可执行文件不能直接运行)但是显示系统无法打开指定的输入文件,再次尝试输入MASM CPU22,结果恢复正常,如图1.4

图1. 3

图1. 4

(4)输入link CPU22,生成可执行文件,然后输入CPU22,运行文件,即可发现AL中存放的两位16进制数为3E。如图1.5所示。//同时可以在文件夹中查看到生成CUP22.EXE文件,如图1.6所示。

图1.5

图1. 6

(5)使用debug来逐句运行该代码,如图1.7~图1.12

图1.7

图1.8

图1.9

图1.10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值