AHU 汇编 实验五

news/2024/11/30 7:56:50/

  • 实验名称:实验五 分支与循环程序设计

二、实验内容:从键盘输入一个四位的16进制数(其中字母为大写),将其转化为二进制数提示输出。

  • 实验过程:

源代码:

data segmentbuff1 db 'Please input a number(H):$'buff2 db 10,?,10 dup(?),13,10buff3 db 'The consequent is:$'data endscode segmentassume cs:code,ds:datamain proc farpush dsxor ax,axpush axmov ax,datamov  ds,axcall tips1      ;调用第一个字符串,提示用户输入call input1     ;调用程序,将数字输入进缓冲区保存call get4h      ;将缓冲区的ASCII码转换成实际的二进制call tips2      ;调用第三个字符串,显示结果call output     ;将缓冲区的二进制转换成ASCII码输出mov ah,4chint 21hretmain endptips1 proc nearmov dx,offset buff1mov ah,9int 21hrettips1 endptips2 proc nearmov dx,offset buff3mov ah,9int 21hrettips2 endpinput1 proc nearlea dx,buff2mov ah,0ahint 21hmov dl,13mov ah,2int 21hmov dl,10mov ah,2int 21hretinput1 endpget4h proc nearlea si,buff2+2   ;将第二个字符串的首地址给si寄存器保存mov bx,0         ;用bx当作计数器和相对偏移量input:mov al,byte ptr[si+bx]cmp al,30hjl exitcmp al,39hjle dig        ;>='0'&&<='9'cmp al,41h     ;<'A',exit     判断输入的合法性jl exitcmp al,46h     ;>='A'&&<='F'  如果是0~9,就进入dig,如果是A~F就进入hexjle hexjmp exitdig:sub al,30hmov byte ptr[si+bx],al      ;原来的缓冲区位置存放输入的真实数值jmp exithex:sub al,37h    mov byte ptr[si+bx],al      ;原来的缓冲区位置存放输入的真实数值jmp exitexit:inc blcmp bl,4                     ;计数功能jz returnjmp inputreturn:retget4h endpoutput proc nearlea si,buff2+2      ;用si寄存器保存第二个字符串的首地址mov bx,0            ;bx充当计数器和相对偏移量,外层循环start0:xor cx,cxmov cx,4mov al,[si+bx]      ;内层循环,用cx计数start1:shr al,1            ;将al右移,判断CFjc put1             ;是1,就用dx保存1,压栈mov dx,0            ;是0,就用dx保存0,压栈push dxdec clcmp cl,0           ;判断四位有没有全部入栈jz start2          ;全部入栈了,就开始输出jmp start1put1:mov dx,1push dxdec clcmp cl,0jz start2jmp start1start2:mov cx,4          ;再用cx当作内层循环计数器start3:pop dxadd dl,30hmov ah,2int 21hdec clcmp cl,0          jz exit1jmp start3        ;出栈输出exit1:inc bx           ;进行外层循环计数mov dl,0mov ah,2int 21hcmp bx,4jz return1jmp start0return1:retoutput endpcode endsend main

运行结果:

  • 实验小结:

经过本次实验,我对使用汇编语言进行编程有了更高能力的提升,和第四次实验相比,这次实验更为简单,只需要把输入的16进制转换成二进制,保存后,再写一个子程序将2进制的值以ASCII码的方式输出出来,在这次实验中,我还提升了运用debug的能力,通过运用debug我找出了许多错误,解决了我逻辑算法上的缺陷,希望在以后的不断编程中,我的能力能得到进一步提升。


http://www.ppmy.cn/news/1379588.html

相关文章

Docker初体验之安装部署和镜像加速(openeuler版)

安装部署&#xff1a; 本人使用的为openeuler版本&#xff0c;无法使用二进制进行安装&#xff08;使用二进制安装时&#xff0c;无法使用docker中的补全命令&#xff0c;需要重新进行配置&#xff09;在此使用yum直接进行安装。 [rootlocalhost ~]# yum install docker 镜像…

Rust 的 std::error::Error

std::error::Error 是 Rust 标准库中的一个 trait&#xff0c;它定义了一个通用的错误处理接口。在 Rust 中&#xff0c;错误处理是一个重要的部分&#xff0c;而 Error trait 使得不同类型的错误可以以一种统一的方式被处理。 Error trait 的定义 Error trait 定义非常简单&…

STM32单片机基本原理与应用(十一)

语音识别实验 此实验采用STM32核心板 LD3320模块&#xff0c;通过初始化LD3320并写入待识别关键词&#xff0c;对麦克风说出相应关键词&#xff0c;实现实训平台上的流水灯相应变化的效果。 LD3320 是一颗基于非特定人语音识别 &#xff08;SI-ASR&#xff1a;Speaker-Indepen…

【C++】关联式容器

目录 前言&#xff1a; 一&#xff0c;set容器 二&#xff0c;multiset容器 三&#xff0c;map容器 四&#xff0c;multimap容器 前言&#xff1a; 在C中&#xff0c;STL中的部分容器&#xff0c;比如&#xff1a;vector、list、deque、 forward_list(C11)等&#xff0c;这…

2024暑期实习八股笔记

文章目录 自我介绍MySQL索引索引种类、B树聚簇索引、非聚簇索引联合索引、最左前缀匹配原则索引下推索引失效索引优化 日志、缓冲池redo log&#xff08;重做日志&#xff09;刷盘时机日志文件组 bin log&#xff08;归档日志&#xff09;记录格式写入机制 两阶段提交undo log&…

20240310-1-Java后端开发知识体系

Java 基础 知识体系 Questions 1. HashMap 1.8与1.7的区别 1.71.8底层结构数组链表数组链表/红黑树插入方式头插法尾插法计算hash值4次位运算5次异或运算1次位运算1次异或运算扩容、插入先扩容再插入先插入再扩容扩容后位置计算重新hash原位置或原位置旧容量 (1) 扩容因子…

主流开发语言与环境介绍

主流开发语言与环境介绍 1. 引言 随着计算机科学的不断发展&#xff0c;各种编程语言和开发环境层出不穷。选择一种适合自己的主流开发语言和环境是每个开发者都必须面临的问题。本文将为大家介绍几种目前最为流行的主流开发语言和环境&#xff0c;帮助读者选择合适的工具进行…

【嵌入式-传感器】

嵌入式-传感器 ■ HX711压力传感器学习一&#xff08;STM32&#xff09;■ 步进电机-ULN2003驱动芯片■ SYN6288语音模块■ ST7789-TFT屏幕驱动■ DHT11温湿度模块■ 对射式红外线传感器计数和旋转编码器计数■ LCD1602液晶屏使用方法(驱动一)■■■ ■ HX711压力传感器学习一&…