用emu8086编写一个exe程序,将AX寄存器中的16位数连续4位分成一组,分别放在AL,BL,CL和DL寄存器中

时间: 2024-05-11 19:14:33 浏览: 10
以下是用emu8086编写的程序: ``` org 100h ; 程序入口地址 start: mov ax, 1234h ; 将16位数 1234h 放入 AX 寄存器中 mov al, ah ; 将 AX 寄存器中的高位放入 AL 寄存器中 mov bl, bh ; 将 AX 寄存器中的第二高位放入 BL 寄存器中 shr ax, 8 ; 将 AX 寄存器中的低8位右移8位,相当于将高8位清零 mov cl, al ; 将 AX 寄存器中的低8位放入 CL 寄存器中 mov dl, ah ; 将 AX 寄存器中的高8位放入 DL 寄存器中 int 20h ; 结束程序 end start ; 程序结束标记 ``` 在程序中,我们先将 16 位数 1234h 放入 AX 寄存器中。然后将 AX 寄存器中的高位放入 AL 寄存器中,第二高位放入 BL 寄存器中。接着,我们将 AX 寄存器中的低8位右移8位,相当于将高8位清零。然后将 AX 寄存器中的低8位放入 CL 寄存器中,高8位放入 DL 寄存器中。最后,程序结束。运行程序后,AL 寄存器中存放的是 12h,BL 寄存器中存放的是 34h,CL 寄存器中存放的是 34h,DL 寄存器中存放的是 12h,符合要求。
相关问题

用emu8086编制一个程序,将AX寄存器中的16位数连续4位分成一组,分别放在AL,BL,CL和DL寄存器中。

以下是使用emu8086编写的程序,可以实现将AX寄存器中的16位数连续4位分成一组,分别放在AL,BL,CL和DL寄存器中: ``` org 100h mov ax, 0BEEFh ; 将16位数BEEF放入AX寄存器 mov bl, al ; 将低8位放入BL寄存器 shr ax, 8 ; 将高8位移到低8位 mov cl, al ; 将低8位放入CL寄存器 shr ax, 4 ; 将高4位移到低4位 mov al, ah ; 将高4位放入AL寄存器 and al, 0Fh ; 取出高4位 mov dl, al ; 将高4位放入DL寄存器 ; 程序结束 mov ah, 4Ch int 21h ``` 运行结果为: ``` AL=0Fh, BL=0EFh, CL=0BEh, DL=0Bh ``` 说明AX寄存器中的16位数BEEF被成功分成了AL=0Fh,BL=0EFh,CL=0BEh和DL=0Bh四组。

使用 emu8086 编写子程序,把一个16位二进制数用十六进制形式显示在屏幕上,分别运用以下2种参数传递方法,并用一个主程序进行验证。 (1) 采用AX寄存器 (2) 采用堆栈

以下是使用 AX 寄存器传递参数的子程序: ``` ; 子程序:将16位二进制数转换为16进制并显示在屏幕上 ; 输入:AX 中存储着一个16位的二进制数 ; 输出:无 BIN2HEX PROC PUSH AX ; 保存 AX 的值 MOV BX, 1000b ; BX = 1000b,用于转换二进制位为16进制位 MOV CX, 4 ; CX = 4,循环4次,将16位二进制数转换为4位16进制数 LOOP1: ROR AX, 1 ; 将 AX 中最低位的二进制数移到 CF 中 ADC BL, BL ; 将 CF 中的二进制数加到 BL 中 ADC BL, 0 ; 将 CF 置为0 DEC BX ; BX 自减,用于判断当前是不是4位二进制数 JNZ LOOP1 ; 如果 BX 不为0,继续循环 ; 将 BL 中的值转换为16进制字符 MOV AH, 0 ; AH = 0,用于将 BL 中的16进制数转换为字符 MOV AL, BL ; AL = BL AND AL, 0Fh ; 只保留 AL 中的低4位 CMP AL, 9 ; 如果 AL 是10~15,需要将其转换为 A~F JBE CHAR1 ; 如果 AL <= 9,直接转换为字符 ADD AL, 7 ; 如果 AL >= 10,将其转换为 A~F CHAR1: ADD AL, 30h ; 将 AL 转换为ASCII码 MOV DL, AL ; DL = AL,用于显示字符 MOV AH, 2 ; 调用 BIOS 中断显示字符 INT 21h ; 显示 DL 中的字符 ; 将 BH 中的值转换为16进制字符 MOV AH, 0 ; AH = 0,用于将 BH 中的16进制数转换为字符 MOV AL, BH ; AL = BH AND AL, 0Fh ; 只保留 AL 中的低4位 CMP AL, 9 ; 如果 AL 是10~15,需要将其转换为 A~F JBE CHAR2 ; 如果 AL <= 9,直接转换为字符 ADD AL, 7 ; 如果 AL >= 10,将其转换为 A~F CHAR2: ADD AL, 30h ; 将 AL 转换为ASCII码 MOV DL, AL ; DL = AL,用于显示字符 MOV AH, 2 ; 调用 BIOS 中断显示字符 INT 21h ; 显示 DL 中的字符 ; 将 AH 中的值转换为16进制字符 MOV AH, 0 ; AH = 0,用于将 AH 中的16进制数转换为字符 MOV AL, AH ; AL = AH AND AL, 0Fh ; 只保留 AL 中的低4位 CMP AL, 9 ; 如果 AL 是10~15,需要将其转换为 A~F JBE CHAR3 ; 如果 AL <= 9,直接转换为字符 ADD AL, 7 ; 如果 AL >= 10,将其转换为 A~F CHAR3: ADD AL, 30h ; 将 AL 转换为ASCII码 MOV DL, AL ; DL = AL,用于显示字符 MOV AH, 2 ; 调用 BIOS 中断显示字符 INT 21h ; 显示 DL 中的字符 ; 将 BL 中的值转换为16进制字符 MOV AH, 0 ; AH = 0,用于将 BL 中的16进制数转换为字符 MOV AL, BL ; AL = BL AND AL, 0Fh ; 只保留 AL 中的低4位 CMP AL, 9 ; 如果 AL 是10~15,需要将其转换为 A~F JBE CHAR4 ; 如果 AL <= 9,直接转换为字符 ADD AL, 7 ; 如果 AL >= 10,将其转换为 A~F CHAR4: ADD AL, 30h ; 将 AL 转换为ASCII码 MOV DL, AL ; DL = AL,用于显示字符 MOV AH, 2 ; 调用 BIOS 中断显示字符 INT 21h ; 显示 DL 中的字符 POP AX ; 恢复 AX 的值 RET ; 返回主程序 BIN2HEX ENDP ``` 以下是使用堆栈传递参数的子程序: ``` ; 子程序:将16位二进制数转换为16进制并显示在屏幕上 ; 输入:堆栈中存储着一个16位的二进制数 ; 输出:无 BIN2HEX PROC PUSH BP ; 保存 BP 的值 MOV BP, SP ; 将 SP 的值赋给 BP,用于访问堆栈中的参数 MOV AX, [BP+4] ; AX = 输入的16位二进制数 MOV BX, 1000b ; BX = 1000b,用于转换二进制位为16进制位 MOV CX, 4 ; CX = 4,循环4次,将16位二进制数转换为4位16进制数 LOOP1: ROR AX, 1 ; 将 AX 中最低位的二进制数移到 CF 中 ADC BL, BL ; 将 CF 中的二进制数加到 BL 中 ADC BL, 0 ; 将 CF 置为0 DEC BX ; BX 自减,用于判断当前是不是4位二进制数 JNZ LOOP1 ; 如果 BX 不为0,继续循环 ; 将 BL 中的值转换为16进制字符 MOV AH, 0 ; AH = 0,用于将 BL 中的16进制数转换为字符 MOV AL, BL ; AL = BL AND AL, 0Fh ; 只保留 AL 中的低4位 CMP AL, 9 ; 如果 AL 是10~15,需要将其转换为 A~F JBE CHAR1 ; 如果 AL <= 9,直接转换为字符 ADD AL, 7 ; 如果 AL >= 10,将其转换为 A~F CHAR1: ADD AL, 30h ; 将 AL 转换为ASCII码 MOV DL, AL ; DL = AL,用于显示字符 MOV AH, 2 ; 调用 BIOS 中断显示字符 INT 21h ; 显示 DL 中的字符 ; 将 BH 中的值转换为16进制字符 MOV AH, 0 ; AH = 0,用于将 BH 中的16进制数转换为字符 MOV AL, BH ; AL = BH AND AL, 0Fh ; 只保留 AL 中的低4位 CMP AL, 9 ; 如果 AL 是10~15,需要将其转换为 A~F JBE CHAR2 ; 如果 AL <= 9,直接转换为字符 ADD AL, 7 ; 如果 AL >= 10,将其转换为 A~F CHAR2: ADD AL, 30h ; 将 AL 转换为ASCII码 MOV DL, AL ; DL = AL,用于显示字符 MOV AH, 2 ; 调用 BIOS 中断显示字符 INT 21h ; 显示 DL 中的字符 ; 将 AH 中的值转换为16进制字符 MOV AH, 0 ; AH = 0,用于将 AH 中的16进制数转换为字符 MOV AL, AH ; AL = AH AND AL, 0Fh ; 只保留 AL 中的低4位 CMP AL, 9 ; 如果 AL 是10~15,需要将其转换为 A~F JBE CHAR3 ; 如果 AL <= 9,直接转换为字符 ADD AL, 7 ; 如果 AL >= 10,将其转换为 A~F CHAR3: ADD AL, 30h ; 将 AL 转换为ASCII码 MOV DL, AL ; DL = AL,用于显示字符 MOV AH, 2 ; 调用 BIOS 中断显示字符 INT 21h ; 显示 DL 中的字符 ; 将 BL 中的值转换为16进制字符 MOV AH, 0 ; AH = 0,用于将 BL 中的16进制数转换为字符 MOV AL, BL ; AL = BL AND AL, 0Fh ; 只保留 AL 中的低4位 CMP AL, 9 ; 如果 AL 是10~15,需要将其转换为 A~F JBE CHAR4 ; 如果 AL <= 9,直接转换为字符 ADD AL, 7 ; 如果 AL >= 10,将其转换为 A~F CHAR4: ADD AL, 30h ; 将 AL 转换为ASCII码 MOV DL, AL ; DL = AL,用于显示字符 MOV AH, 2 ; 调用 BIOS 中断显示字符 INT 21h ; 显示 DL 中的字符 POP BP ; 恢复 BP 的值 RET 2 ; 返回主程序,并将堆栈指针恢复到原来的位置 BIN2HEX ENDP ``` 以下是验证程序: ``` ORG 100h MOV AX, 1010101010101010b ; 输入一个16位的二进制数 ; 使用 AX 寄存器传递参数 CALL BIN2HEX ; 使用堆栈传递参数 PUSH AX CALL BIN2HEX ADD SP, 2 MOV AH, 4Ch ; 退出程序 INT 21h END ```

相关推荐

最新推荐

recommend-type

2024年全国职业院校技能大赛集成电路应用开发赛项竞赛试题(04 卷)

2024年全国职业院校技能大赛集成电路应用开发赛项竞赛试题(04 卷)
recommend-type

Bihl+Wiedemann BWU376024 ASi-3 PROFINET 网关,单主站 GSD文件

Bihl+Wiedemann BWU376024 ASi-3 PROFINET 网关,单主站 GSD文件
recommend-type

STC89C51 简单时钟

STC89C51 简单时钟,叫你从基础开始学习单片机,
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB归一化方法大比拼:5种方法,哪种最适合你的数据?

![MATLAB归一化方法大比拼:5种方法,哪种最适合你的数据?](https://www.finebi.com/wp-content/uploads/2019/11/FineBI%E8%A1%8C%E4%B8%9A%E9%A9%BE%E9%A9%B6%E8%88%B1-1024x510.png) # 1. MATLAB归一化概述 归一化是一种数据预处理技术,用于将数据缩放到特定范围内,从而消除不同特征之间的尺度差异。在MATLAB中,有各种归一化方法可用于不同类型的数据和应用程序。 归一化的主要目的是: - 提高模型的训练效率和准确性,通过消除特征之间的尺度差异,使模型能够更有效地学习
recommend-type

failed to register layer: ApplyLayer exit status 1 stdout: stderr: archive/tar: invalid tar header

很抱歉听到这个问题。这个错误通常是由于Docker镜像损坏或Docker存储库中缺少所需的图层引起的。您可以尝试以下几种方法来解决这个问题: 1. 清理Docker镜像和容器:使用命令“docker system prune”清理不再使用的Docker对象。 2. 检查Docker存储库:确保您正在使用可靠的Docker存储库,并检查是否存在所有必需的图层。 3. 重新下载Docker镜像:如果您确定问题是由于损坏的Docker镜像引起的,则可以尝试重新下载Docker镜像。 4. 更新Docker版本:如果您使用的是旧版Docker,则可能会出现此问题。尝试更新到最新版本的Docke
recommend-type

Linux系统常用操作命令大全手册

附件是Linux系统常用操作命令大全手册,是 markdown格式,其中覆盖了Linux系统管理、文件操作、网络配置等多个方面,都是日常工作中非常常用的命令,欢迎大家下载学习使用!
recommend-type

"互动学习:行动中的多样性与论文攻读经历"

多样性她- 事实上SCI NCES你的时间表ECOLEDO C Tora SC和NCESPOUR l’Ingén学习互动,互动学习以行动为中心的强化学习学会互动,互动学习,以行动为中心的强化学习计算机科学博士论文于2021年9月28日在Villeneuve d'Asq公开支持马修·瑟林评审团主席法布里斯·勒菲弗尔阿维尼翁大学教授论文指导奥利维尔·皮耶昆谷歌研究教授:智囊团论文联合主任菲利普·普雷教授,大学。里尔/CRISTAL/因里亚报告员奥利维耶·西格德索邦大学报告员卢多维奇·德诺耶教授,Facebook /索邦大学审查员越南圣迈IMT Atlantic高级讲师邀请弗洛里安·斯特鲁布博士,Deepmind对于那些及时看到自己错误的人...3谢谢你首先,我要感谢我的两位博士生导师Olivier和Philippe。奥利维尔,"站在巨人的肩膀上"这句话对你来说完全有意义了。从科学上讲,你知道在这篇论文的(许多)错误中,你是我可以依
recommend-type

MATLAB归一化实战指南:从零到一,轻松提升模型性能

![MATLAB归一化实战指南:从零到一,轻松提升模型性能](https://pic1.zhimg.com/80/v2-fd366800ef0bdf29c804ce25c0276778_1440w.webp) # 1. 归一化的理论基础** 归一化是一种数据预处理技术,旨在将数据缩放到特定范围内,通常是[0, 1]或[-1, 1]。通过归一化,可以消除数据量纲上的差异,使不同特征具有可比性,从而提高机器学习模型的性能。 归一化背后的基本原理是,在训练机器学习模型时,模型的学习过程会受到数据分布的影响。如果数据分布不均匀,某些特征可能具有较大的值域,而其他特征的值域较小。这会导致模型在训练过
recommend-type

File path = new File(ResourceUtils.getURL("classpath:static").getPath());

这段代码的作用是获取项目中静态资源文件夹的路径,其中`ResourceUtils.getURL("classpath:static")`表示获取`classpath`下的`static`文件夹的URL,`getPath()`方法则将URL转换成文件路径。最终得到的`File`对象可以用于读取或写入静态资源文件。需要注意的是,这段代码只适用于Spring Boot项目,因为它使用了Spring的`ResourceUtils`类。如果不是Spring Boot项目,可能需要使用其他方式获取静态资源文件夹的路径。