使用emu8086实现——分支结构程序设计

一、实验目的

        1. 掌握分支结构程序的编程方法

        2. 掌握汇编语言程序设计方法,自己编写程序,并调试运行验证结果。

二、实验内容

1.在键盘上输入一个字符,判断是否为小写字母,若不是,显示错误信息,若是,则将其转换为大写字母并显示。

        代码及注释:

DATAS SEGMENT
    message db 0AH,0DH,'Please enter a character:','$' 
    error_message db 0AH,0DH,'Error!','$'
    output_message db 0AH,0DH,'Output letter: ','$'
    output db 0
DATAS ENDS
CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS
START:
    MOV AX,DATAS
    MOV DS,AX 
    ; 显示提示信息
    mov ah, 09h
    lea dx, message
    int 21h   
    ; 读取键盘输入
    mov ah, 01h 
    int 21h
    cmp al, 61h   ; 检查是否小写字母
    jge next1    ; 是小写字母则跳转next1
    jmp next4    ; 不是小写,跳转到next4      
next1:
    cmp al, 7Ah    ; 检查是否大写字母
    jle next2      ; 如果小于等于7Ah,即是小写,跳转到next2
    jmp next4      ; 不是小写,跳转到next4
next2:   
     sub al, 20h    ; 转换为大写字母
     mov output,al 
     ; 显示输出提示信息
     mov ah, 09h 
     lea dx, output_message
     int 21h
next3:  
     mov ah, 02h 
     mov dl, output   
     int 21h
     jmp next5   ; 跳转到next5,程序结束
next4:  
     ;显示错误提示
    lea dx, error_message 
    mov ah, 09h  
    int 21h
; 程序结束      
next5:
    MOV AH, 4CH
    INT 21H
CODES ENDS
    END START

        运行结果及展示: 

        ①小写字母r成功转换为大写字母R:

        ②输入大写字母提示错误:

 

2.用分支结构设计程序实现符号函数,要求x和y存放在内存单元中,并将判断的结果在屏幕上显示输出。

          代码及注释:

DATAS SEGMENT
    x db -4           ; 变量x,赋值为-4
    y db 2            ; 变量y,赋值为2
    da db 'y=1','$'   ; 定义字符串常量da,存储字符串"y=1"
    den db 'y=0','$'  ; 定义字符串常量den,存储字符串"y=0"
    xiao db 'y=-1','$'; 定义字符串常量xiao,存储字符串"y=-1"
DATAS ENDS
STACKS SEGMENT
STACKS ENDS
CODES SEGMENT
    ASSUME CS:CODES, DS:DATAS, SS:STACKS
START:
    MOV AX, DATAS   
    MOV DS, AX       
    mov al, x        ; 将x的值移到AL中
    cmp al, 0        ; 比较AL中的值与0
    JL next          ; 如果小于0,跳转next
    jg next1         ; 如果大于0,跳转next1
    mov y, 0         ; 如果等于0,将0给到变量y
    lea dx, den      ; 将den的地址加载到DX中
    mov ah, 09h      ; 09输出字符串的功能号
    int 21h          ; 21h中断显示字符串
    jmp next2        ; 无条件跳转到标签next2
next1:
    mov y, 1         ; 将1移动到变量y中
    lea dx, da       ; 将da的地址加载到DX中
    mov ah, 09h       
    int 21h          
    jmp next2        ; 跳转到next2
next:
    mov y, -1        ; 将-1移动到y中
    lea dx, xiao     ; 将xiao的地址加载到DX中
    mov ah, 09h      
    int 21h          
next2:
    MOV AH, 4CH      ; 程序结束的功能号
    INT 21H          ; 21h中断终止程序
CODES ENDS
END START           ; 程序结束

        运行结果及展示:

3.求X的绝对值。提示:当X小于等于零时,求补码。当X大于零时,X与Y相加,相加之和放在AX中。 

        代码及注释:

data segment
    x db 3   ; 变量x,存储为有符号字节类型,并赋值为-1
    y db 5    ; 变量y,赋值为5
    abs_val db 0 ; 存储绝对值的变量  
    abs_msg db 0AH,0DH,"The absolute value of x is: $"
data ends
code segment
    assume cs:code, ds:data
start:
    mov ax, data   ; 将数据段data的地址加载到AX寄存器中
    mov ds, ax     ; 将AX中的数据段地址移动到DS寄存器中
    mov ah, 0     ; 将0移动到AH寄存器中
    mov al, x     ; 将变量x的值移动到AL寄存器中
    cmp al, ah    ; 比较AL寄存器中的值与AH寄存器中的值
    jge lp1       ; 如果大于等于,跳转到lp1
    neg al        ; 将AL寄存器中的值取反
    mov abs_val, al     ; 将AL寄存器中的值移动到绝对值变量abs_val中
    jmp lp2       ; 跳转到lp2
lp1:
    add al, y     ; 将变量y的值加到AL寄存器中
    adc ah, 0     ; 将进位标志位加到AH寄存器中
    mov abs_val, al     ; 将AL寄存器中的值移动到绝对值变量abs_val中
lp2:
    ; 显示x的绝对值 
    mov ah,09h
    lea dx,abs_msg
    int 21h 

    mov ah, 02h  
    mov dl, abs_val  
    add dl, '0'   ; 将绝对值转换为ASCII码
    int 21h      
    ; 结束程序
    mov ah, 4Ch   ; 设置程序终止的功能号为4Ch
    mov al, 00h   ; 设置返回代码为0
    int 21h       ; 调用21h中断终止程序
code ends

end start       ; 程序结束

运行结果展示:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/318970.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

win桌面图标间距变大如何调整

1、win键R-->输入regedit-->回车 2、 找到 IconSpacing 和 IconVerticalSpacing -->HKEY_CURRENT_USER-->Control Panel-->Desktop-->WindowMetrics-->IconSpacing-->IconVerticalSpacing 3、分别将其值改成-1125(系统默认的值&#xff09…

Cortex-M移植

常用寄存器 PRIMASK寄存器 PRIMASK寄存器为1位宽的中断屏蔽寄存器。在置位时,它会阻止不可屏蔽中断(NMI)和HardFault异常之外的所有异常(包括中断)。实际上,它是将当前异常优先级提升为0,这就是…

#Prompt##提示词工程##AIGC##LLM#使用大型预训练语言模型的关键考量

如果有不清楚的地方可以评论区留言,我会给大家补上的! 本文包括: Prompt 的一些行业术语介绍 Prompt 写好提示词的方法经验介绍(附示例教程) LLM自身存在的问题(可以用Prompt解决的以及无法用Prompt解决的&…

【Maven】007-Maven 工程的继承和聚合关系

【Maven】007-Maven 工程的继承和聚合关系 文章目录 【Maven】007-Maven 工程的继承和聚合关系一、Maven 工程的继承关系1、继承的概念2、继承的作用3、继承的语法4、父工程统一管理依赖版本父工程声明依赖版本子工程继承以来版本 二、Maven 工程的聚合关系1、聚合的概念2、聚合…

十三、QPalette的简单使用(Qt5 GUI系列)

目录 一、设计需求 二、实现代码 三、代码解析 四、总结 一、设计需求 在实际应用中,经常需要改变某个控件的颜色外观,如背景、文字颜色等。Qt提供的调色板类 QPalette 专门用于管理对话框的外观显示。QPalette 类相当于对话框或是控件的调色板&…

centos7系统部署rancher2.x,并创建k8s集群

转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。 前言 一 本文目标: 1、部署rancher-server UI,版本:2.3.5 2、通过rancher部署一个k8s集群c…

网络协议与攻击模拟_04ICMP协议与ICMP重定向

ICMP协议是网络层协议, 利用ICMP协议可以实现网络中监听服务和拒绝服务,如 ICMP重定向的攻击。 一、ICMP基本概念 1、ICMP协议 ICMP是Internet控制报文协议,用于在IP主机、路由器之间传递控制消息,控制消息指网络通不通、主机是…

Python 二维平面Delaunay三角网建立

目录 一、算法概念二、代码实现三、结果示例根据二维平面内的离散点建立平面三角网。 一、算法概念 三角剖分与Delaunay剖分定义:如何把一个散点集剖分成不均匀的三角形网格,即在给定的平面点集上,生成三角形集合的过程。考虑平面点集P={p1,p2,p3,…,pn},我们希望得到三…

CMake+QT+大漠插件的桌面应用开发

文章目录 CMakeQT大漠插件的桌面应用开发说明环境项目结构配置编译环境代码 CMakeQT大漠插件的桌面应用开发 说明 在CMake大漠插件的应用开发——处理dm.dll,免注册调用大漠插件中已经说明了如何免注册调用大漠插件,以及做了几个简单的功能调用&#x…

金南瓜SECS/GEM发送event、VID

金南瓜SECS/GEM发送事件(CEID)很简单,只需一步就完成。 最重要是简单易懂,任何人一看就上手。无需懂得内部逻辑,以及一大堆的导入问题。 代码如下 C#的代码: // 扫码成功 private void buttonReadBarco…

【教学类-43-20】20240113 数独(二)4宫格、9宫格 无空行A4模板

作品展示: 4宫格 9宫格 题目连在一起 背景需求: 制作十宫格数独模板,为了凑满20行,删除了每个数独题之间的行列分割线 【教学类-43-18】A4最终版 20240111 数独11.0 十宫格X*YZ套(n10),套用没有分割行列的A4横版模板…

浅谈对Maven的理解

一、什么是Maven Maven——是Java社区事实标准的项目管理工具,能帮你从琐碎的手工劳动中解脱出来,帮你规范整个组织的构建系统。不仅如此,它还有依赖管理、自动生成项目站点等特性,已经有无数的开源项目使用它来构建项目并促进团队…

将 OpenCV Java 与 Eclipse 结合使用

配置 Eclipse 首先,从下载页面获取 OpenCV 的新版本,并将其解压缩到一个简单的位置,例如 .我使用的是 2.4.6 版,但其他版本的步骤或多或少相同。C:\OpenCV-2.4.6\ 现在,我们将 OpenCV 定义为 Eclipse 中的用户库&…

【数据结构与算法】之数组系列-20240114

这里写目录标题 一、414. 第三大的数二、448. 找到所有数组中消失的数字三、561. 数组拆分四、594. 最长和谐子序列 一、414. 第三大的数 简单 给你一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。 示例 1: 输入&…

个人网站制作 Part 1 创建网站 | Web开发项目

文章目录 👩‍💻 基础Web开发练手项目系列:个人网站制作🚀 项目概述🔧 开发工具和环境配置🛠 项目实现步骤步骤 1: 创建HTML文件步骤 2: 添加CSS样式步骤 3: 链接CSS文件步骤 4: 添加JavaScript交互 &#…

【教学类-43-19】20240113 数独(一) 3-5-6-7-8-10宫格 无空行A4模板

作品展示: 3宫格 5宫格 6宫格 7宫格 8宫格 10宫格,题目连在一起 背景需求: 制作十宫格数独模板,为了凑满20行,删除了每个数独题之间的行列分割线 【教学类-43-18】A4最终版 20240111 数独11.0 十宫格X*YZ套(n10)&am…

【WPF.NET开发】流文档

本文内容 什么是流文档?流文档类型创建流内容与流相关的类内容架构自定义文本 流文档旨在优化查看和可读性。 流文档根据运行时变量(例如,窗口大小、设备分辨率和可选的用户首选项)来动态调整和重新排列内容,而不是设…

综合评价 | 基于EW、EW-BP、EW-ELM的地区发展水平综合评价(Matlab)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 综合评价 | 基于EW、EW-BP、EW-ELM的地区发展水平综合评价(Matlab) 程序设计 完整程序和数据获取方式:私信博主回复基于EW、EW-BP、EW-ELM的地区发展水平综合评价(Matl…

YOLOV8代码本地编译

下载pycharm 在 Linux 操作系统中安装 Pycharm 社区版_linux中安装pycharm社区版-CSDN博客 Pycharm中配置 Conda 虚拟环境 百度安全验证https://baijiahao.baidu.com/s?id1771914506705481878&wfrspider&forpc 源码编译 果您对参与开发感兴趣或希望尝试最新源代码…

昇腾910b部署Chatglm3-6b进行流式输出【pytorch框架】NPU推理

文章目录 准备阶段避坑阶段添加代码结果展示 准备阶段 配套软件包Ascend-cann-toolkit和Ascend-cann-nnae适配昇腾的Pytorch适配昇腾的Torchvision Adapter下载ChatGLM3代码下载chatglm3-6b模型,或在modelscope里下载 避坑阶段 每个人的服务器都不一样&#xff0…
最新文章