微机实验第二章:循环、分支程序和常用的DOS功能调用(B站)

这篇具有很好参考价值的文章主要介绍了微机实验第二章:循环、分支程序和常用的DOS功能调用(B站)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

作为一名在校大学生,我将近期所学的知识进行总结。
一年之后我再看这些代码,我发现这些代码对于初学者十分友好。因此,我将这些代码分享给大家,希望大家能有所收获。如有不足,欢迎交流。

推荐可以看这位B站up主的视频学习汇编

B站up主

提示:以下是本篇文章正文内容,下面案例可供参考

一、利用DOS调用实现简单的加法

2.1题目要求

(1)输出提示信息“Please input A” (功能号09H)
(2)利用 01H功能,获取输入 A
(3)对输入A进行处理实现ASCII码到数值的转换
(4)输出提示信息“Please input B”
(5)利用 01H功能,获取输入 B
(6)对输入B进行处理实现ASCII码到数值的转换
(7)计算A+B并实现十六进制数到BCD码的转换
(8)将BCD码转换为ASCII码,并利用02H功能进行显示

2.1程序代码和运行结果

2.1代码如下(示例):

; multi-segment executable file template.

data segment
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TIPS1  DB 'Please input A',0DH,0AH,'$'                                ;TIPS(提示信息)                     
                                                                ;ODH 回车    ;0AH换行
TIPS2  DB 'Please input B',0DH,0AH,'$'    

TIPS3  DB 'RESULT IS',0DH,0AH,'$'                  

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ends


code segment
start:
; set segment registers:
    mov ax, data
    mov ds, ax
    mov es, ax
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ;数据A的输入
    MOV DX,OFFSET TIPS1    
    MOV AH,09H       ;利用09H的功能,将提示信息显示出来
    INT 21H
    
    MOV AH,01H       ;利用01H的功能,读取一个字符
    INT 21H         
    
    AND AL,0FH       ;因为它是一个ascall值,所以将高四位屏蔽,只保留低四位                         
    MOV BL,AL        ;将数据暂存放到 BL 当中   
    
    ;数据B的输入      
    
    MOV DL,0DH        ;回车
    MOV AH,02H
    INT 21H
    
    MOV DL,0AH         ;换行
    MOV AH,09H
    INT 21H
    
    
    MOV DX,OFFSET TIPS2    
    MOV AH,09H       ;利用09H的功能,将提示信息显示出来
    INT 21H
    
    MOV AH,01H       ;利用01H的功能,读取一个字符
    INT 21H         
    
    AND AL,0FH       ;因为它是一个ascall值,所以将高四位屏蔽,只保留低四位  数据暂存放到 AL 当中    
    
 
    ADD AL,BL        ;A+B    
    MOV AH,00H       ;AH清0
    AAA              ;将计算结果换为非压缩的BCD码的形式
    ADD AX,3030H     ;将数据转化为ASCALL码
    MOV BX,AX        ;将数据暂存放到BX
    
    ;结果显示    
    
    MOV DL,0DH             ;回车
    MOV AH,02H
    INT 21H
    
    MOV DL,0AH             ;换行
    MOV AH,09H
    INT 21H
    
    MOV DX,OFFSET TIPS3    ;提示信息
    MOV AH,09H
    INT 21H
    
    MOV DL,BH
    MOV AH,02H
    INT 21H   
    
    MOV DL,BL
    MOV AH,02H
    INT 21H
      
    ;退出DOS
    MOV AH,4CH      
    INT 21H
                          
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;    
    mov ax, 4c00h ; exit to operating system.
    int 21h    
ends

end start ; set entry point and stop the assembler.

2.1运行结果
emu80861、利用dos调用实现简单的加法: (1)输出提示信息“please input a”(功能,emu8086,arm,arm开发,单片机

二、求某数据区内负数的个数

2.2题目要求

设数据区的BUF中存放着N+1个单字节数据,第一个字节存放数据长度N。从第二个字节开始依次存放着N个数据。设计程序根据数据最高位是否为1,统计N个数据中有多少个负数,将结果存放在RESULT单元中。

2.2程序代码和运行结果

2.2代码如下(示例):

; multi-segment executable file template.

data segment
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;      

BUF DB 10   ;定义了10个数字
    DB 2,3,6,-45,-78,-9,3,5,-10,9     ;10个数分别是
result DB 0

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ends



code segment
start:
; set segment registers:
    mov ax, data
    mov ds, ax
    mov es, ax
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;    

    MOV SI,OFFSET BUF      ;将BUF首地址送给SI     
    
    MOV CH,00H      ;题目要求,第一个数是指循环的次数,因此应该放到CX寄存器中      
    MOV CL,[SI]     ;但是CX是一个字,BUF是一个字节,会被转化为字在给CX赋值      
     
    INC SI                ;  SI++
    MOV BL,00H            ;BL清0  
    
xh:MOV AL,[SI]       
    CMP AL,80H          ;判断AL里面值的大小
    JB  zhengshu               ;小于80H说明是正数,不用操作   
    INC BL                  ;BL用于统计负数的个数。因此BL++
zhengshu:INC SI             ;正数的,SI的地址++
    LOOP xh                 
    
    MOV result,BL 
            
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  
    mov ax, 4c00h ; exit to operating system.
    int 21h    
ends

end start ; set entry point and stop the assembler.

2.2运行结果

emu80861、利用dos调用实现简单的加法: (1)输出提示信息“please input a”(功能,emu8086,arm,arm开发,单片机

三、编写一个循环结构的程序

2.3题目要求

请编写一个循环结构的程序,通过使用02H号功能调用,依次在屏幕上显示26个英文字母的大写形式。并且在显示字符之间加入空格

2.3程序代码和运行结果

2.3代码如下(示例):

; multi-segment executable file template.  

data segment
    ; add your data here!
    pkey db "press any key...$"
ends

code segment
start:
; set segment registers:
    mov ax, data
    mov ds, ax
    mov es, ax

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
     
     MOV CX,26  ;控制循环次数
     MOV BL,00H  ;让字母变换的变量 
     
xh:  
     MOV DL,'A'
     ADD DL,BL
     MOV AH,02H
     INT 21H     
     INC BL       ;将BL加1,使其显示字母发生改变    
     
     MOV DL,' '   ;使显示的字母中间有空格
     MOV AH,02H
     INT 21H
     
LOOP xh     

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

    mov ax, 4c00h ; exit to operating system.
    int 21h    
ends

end start ; set entry point and stop the assembler.

2.3运行结果

emu80861、利用dos调用实现简单的加法: (1)输出提示信息“please input a”(功能,emu8086,arm,arm开发,单片机

四、由键盘输入一个字母的小写形式,将其变换为大写形式输出。

2.4题目要求

(1)将程序设计为一个循环结构可以不停的对输入字符进行转换
(2)设置一个终止字符‘#’当输入时可以停止转换
(3)可以对输入数据的格式进行判断如果不是小写字母,则重新输入

2.4程序代码和运行结果

2.4代码如下(示例):


DATA	SEGMENT		;数据段		
     MESS DB 0DH,0AH,'PLEASE INPUT A LETTER',0DH,0AH,'$'
 
DATA	ENDS

EXTRA	SEGMENT	;	;附加段
 
EXTRA	ENDS
;

STACK	SEGMENT  PARA  STACK  ‘STACK’   ;堆栈段
STAPN	DB     100 DUP (00H)	;定义100字节空间
TOP	EQU  LENGTH  STAPN
STACK	ENDS

           
CODE	SEGMENT			
MAIN	PROC   FAR			;过程定义语句
				;说明4个段寄存器分别与哪些段有关
		ASSUME  CS:CODE, DS:DATA,ES:EXTRA,SS:STACK
 
START: 
        MOV AX,DATA
        MOV DS,AX    
        
        MOV AX, EXTRA
        MOV ES,AX
        
        MOV AX,STACK
        MOV SS,AX

  M_START :  MOV DX,OFFSET MESS
             MOV AH,09H
             INT 21H
             
             MOV AH,01H
             INT 21H
             
             CMP AL,'#'
             JE  M_OUT
             
             CMP AL,'a'
             JB  M_START

             CMP AL,'z'
             JA  M_START

             SUB AL,20H
             MOV DL,AL
             MOV AH,02H
             INT 21H

             JMP   M_START
             
 
  M_OUT:   MOV AX,4C00H
           INT 21H      
            
        RET
MAIN	ENDP		;MAIN过程结束
CODE 	ENDS	          	;代码段结束
    END   MAIN	;整个源代码结束
          

2.4运行结果
emu80861、利用dos调用实现简单的加法: (1)输出提示信息“please input a”(功能,emu8086,arm,arm开发,单片机文章来源地址https://www.toymoban.com/news/detail-769898.html

到了这里,关于微机实验第二章:循环、分支程序和常用的DOS功能调用(B站)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ArduinoUNO实战-第二十二章-红外遥控实验

    Arduino基础入门篇25—红外遥控 Arduino与红外遥控握手 在日常生活中我们会接触到各式各样的遥控器,电视机、空调、机顶盒等都有专用的遥控器,很多智能手机也在软硬件上对红外遥控做了支持,可以集中遥控绝大部分家用电器。 当按下遥控器上某个按键,串口输出该按键的

    2024年02月16日
    浏览(33)
  • 第二章:AI大模型的基本原理2.2 深度学习基础2.2.3 循环神经网络

    循环神经网络(Recurrent Neural Networks,RNN)是一种特殊的神经网络结构,它可以处理序列数据,如自然语言、时间序列预测等。RNN的核心特点是包含反馈连接,使得网络具有内存功能,可以在处理序列数据时保留以前的信息。这一特性使得RNN成为处理自然语言和时间序列数据的

    2024年01月16日
    浏览(33)
  • 《计算机网络-自顶向下》wireShark实验-第二章:http

    我们开始探索HTTP,方法是 下载一个非常简单的HTML文件 。非常短,并且 不包含嵌入的对象 。执行以下操作: 启动您的浏览器。 启动Wireshark数据包嗅探器,如Wireshark实验-入门所述(还没开始数据包捕获)。 在display-filter-specification窗口中输入“http”(只是字母,不含引号标

    2024年02月19日
    浏览(35)
  • 【云计算与虚拟化】第二章 实验一 VMware Workstation的使用

    实验一   vmware workstation的使用 安装Windows Server 2012 R2虚拟机,并激活 (计算机命名为:学号 + 姓名拼音的首字母) 2.在 Windows Server 2012 R2 的虚拟机中安装 VMTools 3.关机创建快照 (快照命名为:学号 + 姓名拼音的首字母) 4.通过启用共享文件夹的形式让虚拟机访问主机的文件

    2024年02月05日
    浏览(40)
  • 【云计算与虚拟化】第二章 实验二 Vmware Workstation 15的使用

    实验二   Vmware Workstation 15的使用 在上一实验的基础上,将两台虚拟机调节到在桥接模式下,配置相应的网络参数,实现虚拟机1和2能相互通信,虚拟机1和2能够ping通外网,虚拟机1和2能ping通物理机。 (截取虚拟网络编辑器中桥接的信息以及两台虚拟机调节到在桥接模式的

    2024年02月06日
    浏览(37)
  • 《Jetpack Compose从入门到实战》 第二章 了解常用UI组件

    书附代码 Google的图标库 ConstraintLayout约束布局需要依赖:implementation “androidx.constraintlayout:constraintlayout-compose: $constraintlayout _version” 《Jetpack Compose从入门到实战》第一章 全新的 Android UI 框架 《Jetpack Compose从入门到实战》 第二章 了解常用UI组件 《Jetpack Compose从入门到实战》

    2024年02月07日
    浏览(40)
  • 【QT开发笔记-基础篇】| 第二章 常用控件 | 2.12 表格控件 QTableWidget

    【QT开发笔记-基础篇】| 第二章 常用控件 | 2.12 表格控件 QTableWidget(1) QTableWidget 是 Qt 中的表格控件,可以行列的形式来展示数据 QTableWidget 有很多属性和方法,完整的可查看帮助文档。 在窗口上放置一个 QTableWidget 控件后,既可以在设计师 UI 界面来编辑属性和添加数据,也

    2024年02月12日
    浏览(39)
  • 黑马程序员rocketmq第二章

    maven工程springboot-rocketmq-producer application.properties 测试类 springboot-rocketmq-consumer application.properties zookeeper集群搭建 1.在/usr/soft/zookeeper-cluster下存放zookeeper-3.4.6.tar.gz 2.解压:tar -zvxf zookeeper-3.4.6.tar.gz 3./usr/soft/zookeeper-cluster/zookeeper-3.4.6/conf 下重命名 zoo_sample.cfg为zoo.cfg mv zoo_sample.cf

    2023年04月26日
    浏览(48)
  • 《python语言程序设计基础》(第二版)第二章课后习题参考答案

    第二章 Python程序实例解析 2.1 温度转换 2.2 汇率兑换 优化: 优化的主要改动: 将货币符号和金额分离出来,使代码更加清晰易读。 将条件判断改为根据货币符号进行判断,避免重复判断。 2.3 绘制彩色蟒蛇 2.4 等边三角形的绘制 代码一: 代码二: 2.5 叠加等边三角形的绘制

    2024年03月19日
    浏览(46)
  • 谭浩强【C语言程序设计】第二章习题详解

      目录 ​编辑 1,什么是算法?试从日常生活中找3个例子,描述它们的算法。 2,什么叫结构化的算法?为什么要提倡结构化的算法? 3,试述3种基本结构的特点,请另外设计两种基本结构(要符合基本结构的特点)。 4,用传统流程图表示求解以下问题的算法。 (1)有两个

    2024年02月01日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包