当前位置: 首页 > news >正文

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

一、实验目的

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

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

二、实验内容

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

        代码及注释:

DATAS SEGMENTmessage 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 SEGMENTASSUME CS:CODES,DS:DATAS
START:MOV AX,DATASMOV DS,AX ; 显示提示信息mov ah, 09hlea dx, messageint 21h   ; 读取键盘输入mov ah, 01h int 21hcmp al, 61h   ; 检查是否小写字母jge next1    ; 是小写字母则跳转next1jmp next4    ; 不是小写,跳转到next4      
next1:cmp al, 7Ah    ; 检查是否大写字母jle next2      ; 如果小于等于7Ah,即是小写,跳转到next2jmp next4      ; 不是小写,跳转到next4
next2:   sub al, 20h    ; 转换为大写字母mov output,al ; 显示输出提示信息mov ah, 09h lea dx, output_messageint 21h
next3:  mov ah, 02h mov dl, output   int 21hjmp next5   ; 跳转到next5,程序结束
next4:  ;显示错误提示lea dx, error_message mov ah, 09h  int 21h
; 程序结束      
next5:MOV AH, 4CHINT 21H
CODES ENDSEND START

        运行结果及展示: 

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

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

 

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

          代码及注释:

DATAS SEGMENTx db -4           ; 变量x,赋值为-4y db 2            ; 变量y,赋值为2da 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 SEGMENTASSUME CS:CODES, DS:DATAS, SS:STACKS
START:MOV AX, DATAS   MOV DS, AX       mov al, x        ; 将x的值移到AL中cmp al, 0        ; 比较AL中的值与0JL next          ; 如果小于0,跳转nextjg next1         ; 如果大于0,跳转next1mov y, 0         ; 如果等于0,将0给到变量ylea 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 segmentx db 3   ; 变量x,存储为有符号字节类型,并赋值为-1y db 5    ; 变量y,赋值为5abs_val db 0 ; 存储绝对值的变量  abs_msg db 0AH,0DH,"The absolute value of x is: $"
data ends
code segmentassume 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       ; 如果大于等于,跳转到lp1neg 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,09hlea dx,abs_msgint 21h mov ah, 02h  mov dl, abs_val  add dl, '0'   ; 将绝对值转换为ASCII码int 21h      ; 结束程序mov ah, 4Ch   ; 设置程序终止的功能号为4Chmov al, 00h   ; 设置返回代码为0int 21h       ; 调用21h中断终止程序
code endsend start       ; 程序结束

运行结果展示:

相关文章:

  • 41k+ stars 闪电般快速的开源搜索引擎 docker安装教程
  • Oracle数据库学习入门教程
  • Intel Quick Sync Video(QSV)(快速视频同步)介绍
  • thinkphp学习09-数据库的数据新增
  • 面试 React 框架八股文十问十答第二期
  • 【电源专题】案例:不同的充电芯片在没插入电池但插入USB充电器情况下为什么无法兼容?
  • 计算机网络夯实之路-HTTP详解
  • 微服务治理:微服务断路器(微服务故障隔离模式)详解
  • 阿里云国际服务器设置安全防护程序
  • 阿里云提示服务器ip暴露该怎么办?-速盾网络(sudun)
  • 如何激活数据要素价值
  • LeetCode 36. 有效的数独
  • Docker的基本管理
  • sklearn快速实现python机器学习算法
  • Java后端开发——Mybatis实验
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • Asm.js的简单介绍
  • css布局,左右固定中间自适应实现
  • JWT究竟是什么呢?
  • 构建二叉树进行数值数组的去重及优化
  • 前端性能优化--懒加载和预加载
  • 小试R空间处理新库sf
  • 学习笔记:对象,原型和继承(1)
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • hi-nginx-1.3.4编译安装
  • 进程与线程(三)——进程/线程间通信
  • ​如何在iOS手机上查看应用日志
  • #Z0458. 树的中心2
  • #单片机(TB6600驱动42步进电机)
  • ( 10 )MySQL中的外键
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (2)STM32单片机上位机
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (分布式缓存)Redis持久化
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (转)Oracle 9i 数据库设计指引全集(1)
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .bat批处理(十一):替换字符串中包含百分号%的子串
  • .gitignore文件—git忽略文件
  • .NET C# 使用GDAL读取FileGDB要素类
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .Net Web窗口页属性
  • .NET是什么
  • .Net转Java自学之路—SpringMVC框架篇六(异常处理)
  • .skip() 和 .only() 的使用
  • ?.的用法
  • ??myeclipse+tomcat
  • @cacheable 是否缓存成功_让我们来学习学习SpringCache分布式缓存,为什么用?
  • [100天算法】-实现 strStr()(day 52)
  • [2024-06]-[大模型]-[Ollama] 0-相关命令
  • [Android Pro] listView和GridView的item设置的高度和宽度不起作用
  • [Android 数据通信] android cmwap接入点