Emu8086三种格式的代码-(顺序,分支,循环)
这个学期准备考研,于是就没有怎么听别的课,现在临近期末,汇编成了个难题。下面是我学校的实验报告
做一个复习的记录吧,下面的代码都是在Emu8086上运行出来的代码
下面先介绍一下,汇编里面的格式问题
简化段格式定义.MODEL SMALL ;定义程序的存储模式
.MODEL SMALL ;定义程序的存储模式
.STACK ;定义堆栈段
.DATA ;定义数据段 ....... ;数据定义 .CODE ;定义代码段
.STARTUP ;程序起始点,并建立DS,SS内容 ....... ;程序定义 .EXIT 0 ;程序结束点,返回DOS ....... ;子程序定义 END ;汇编结束
完整段定义格式
STACK SEGMENT STACK ;定义堆栈段STACK
..... ;分配堆栈段的大小 STACK ENDS ;堆栈段结束
DATA SEGMENT ;定义数据段DATA
..... ;定义数据 CODE SEGMENT 'CODE' ;定义代码段
ASSUME CS:CODE,DS:DATA,SS:STACK
;确定CS/DS/SS指向的逻辑段
START :MOV AX,DATA
MOV DS,AX ;设置数据段的段地址DS ...... ;程序代码 MOV AX,4C00H ;返回DOS
INT 21H ...... ;子程序代码 CODE ENDS
ENDS START ;汇编结束
顺序语句
前提的知识,AL和AH都是8位的寄存器.AL是低字节,AH是高字节。(很好理解,HHHH就是高的意思嘛)
.MODEL SMALL ;定义程序的存储模式
.STACK ;定义堆栈段
.DATA ;定义数据段 X DB 8CH ;定义了一个名为DB类型的X
Y DB 64H ;定义了一个名为DB类型的Y
Z DB 0H ;定义了一个名为DB类型的Z .CODE ;定义代码段
.STARTUP ;程序起始点,并建立DS,SS内容 MOV AL,X ;把X的内容传递到AL里面
ADD AL,Y ;把AL的内容和Y的内容相加
MOV AH,00H ;把AH里面的值清0
ADC AH,00H ;把CF里面的值给AH MOV BL,2 ;赋值BL为2
DIV BL ;把让AL除以BL,并把结果赋值给AL
MOV Z,AL ;把AL给Z .EXIT 0 ;程序结束点,返回DOS
END ;汇编结束
分支结构
单分支结构
知识前提:
CMP是比较指令,将目标操作数与源操作数相减,不送回结果,只根据结果置标志位。
CMP dest,src ;(dest)-(src)
CMP A,B
① 判断是否相等
看ZF ,ZF=1,A=B, ZF=0 A ≠B
② 判断两个操作数的大小
无符号的
CF=1 ,A<B CF=0 ,A≧B
有符号的,SF⊕OF,看SF和OF的异或
SF⊕OF=1 ,A<B SF⊕OF=0 ,A≧B
代码如下
.MODEL SMALL
.STACK ;定义堆栈段
.DATA ;定义数据段 RESULT DW ;DW是16位的类型 .CODE ;定义代码段
.STARTUP ;程序起始点,并建立DS,SS内容 MOV AX, ;把寄存器存到AX 1里面 CMP AX, ;把寄存器和AX里面相比,大于的地方就跳转,
;小于的话就不跳转 JGE NONNEG ;分支条件:AX>=
NEG AX ;NEG是取补指令,
;NEG将操作数取补数,然后在末尾位+ ;条件不满足,为负数,需要执行分支体进行求补
NONNEG: MOV RESULT,AX ;条件满足,为正数,保存结果
;NONNEG就是一个符号位置,跳转的位置. .EXIT ;程序结束点,返回DOS END ;汇编结束
多分支结构
前提的知识。
带符号数的乘积
IMUL reg/mem ;dest 隐含着被乘数AL/AX乘以乘数reg/men
JGE /JNL SF=OF ;若大于等于则转移
.MODEL SMALL ;定义程序的存储模式
.STACK ;定义堆栈段
.DATA ;定义数据段 _A DB 00H
_B DB 00H
_C DB 00H
; _D DB 0H
TAG DB 00H
;定义了四个变量,_A,_B,_C,_D
;他们都是DB类型的 .CODE ;定义代码段
.STARTUP ;程序起始点,并建立DS,SS内容 MOV AL,_B ;把_B里面的值赋值给AL
IMUL AL ;IMUL 是带符号的乘法指令,
;完成两个带符号的8位或16位2进制数乘法计算.
;将AL的内容乘以_B 乘积放入到AL中.
;乘积存放在AH,AL,DX,AX中。
MOV BX,AX ;BX把AX中的值传递给BX,BX里面为B*B
MOV AL,_A ;在把_A的值给AL
IMUL _C ;把AL的值和_C的值想乘,结果放入到此AX中
;现在AX里面为AC MOV CX, ;把4给CX
IMUL CX ;AL的值乘4,结果给AX
;AX现在里面的值是4AC CMP BX,AX ;将AX和BX进行比较
;BX-AX会标志位会产生改变
;SF OF
JGE YES ;如果BX大于AX的话 TAG=
MOV TAG, ;分支语句体1:条件不满足,TAG<- JMP DONE ;BX小于AX的话,TAG=
YES: MOV TAG, DONE:
.EXIT ;程序结束点,返回DOS END ;汇编结束
循环结果
.MODEL SMALL ;定义程序的存储模式
.STACK ;定义堆栈段
.DATA ;定义数据段 SUM DW 00H ;设置一个SUM类型为DW函数值为0H .CODE ;定义代码段
.STARTUP ;程序起始点,并建立DS,SS内容 XOR AX,AX ;XOR是把操作数"异或"
;这就是一个置零功能
MOV CX,100 ;把100这个立即数送给CX AGAIN:ADD AX,CX ;AGAIN就是循环的标识符
LOOP AGAIN ;执行LOOP的时候,自动将CX里面的内容减一
;直到CX里面的值为0 MOV SUM,AX ;把AX里面的值送给SUM .EXIT 0 ;程序结束点,返回DOS END ;汇编结束
Emu8086三种格式的代码-(顺序,分支,循环)的更多相关文章
- iOS开发——程序员必备&iOS安装包的三种格式 deb、ipa 和 pxl的解释和说明
iOS安装包的三种格式 deb.ipa 和 pxl的解释和说明 目前 iOS 平台上常见的安装包有三种,deb.ipa 和 pxl.转自链接:http://fanlb.blogbus.com/logs ...
- Notepad++中Windows,Unix,Mac三种格式
Notepad++中Windows,Unix,Mac三种格式之间的转换 http://www.crifan.com/files/doc/docbook/rec_soft_npp/release/htm ...
- Mysql Binlog三种格式介绍及分析【转】
一.Mysql Binlog格式介绍 Mysql binlog日志有三种格式,分别为Statement,MiXED,以及ROW! 1.Statement:每一条会修改数据的sql都会记录在 ...
- 【转】Notepad++中Windows,Unix,Mac三种格式之间的转换
原文网址:http://www.crifan.com/files/doc/docbook/rec_soft_npp/release/htmls/npp_func_windows_unix_mac.ht ...
- SIM卡中UCS2编码的三种格式(80,81,82)分析
网上看到一篇比较好的说ucs2编码的文章,保存一下,原文地址: http://hi.baidu.com/youren4548/blog/item/fa08bd1bf61005058618bf1d.ht ...
- MySQL二进制日志文件Binlog的三种格式以及对应的主从复制中三种技术
二进制日志文件Binlog的格式主要有三种: 1.Statement:基于SQL语句级别的Binlog,每条修改数据的SQL都会保存到Binlog里面. 2.ROW:基于行级别,每一行数据的变化都会记 ...
- Chrome插件安利!可以一键导出微信读书笔记|支持Markdown等三种格式
众所周知,微信读书App 是一款非常优秀的阅读类App ,周围也有不少人在用.虽然工作比较忙.但是也没少在上面看书做笔记. 美中不足的是,目前微信读书虽然支持笔记导出,但是提供的是将笔记复制到剪切板, ...
- 【Linux常用工具】1.1 diff命令的三种格式
diff是用来比较两个文本文件的差异的工具,它有三种格式,下面用实例介绍一下: 准备三个测试文件1.txt 2.txt 3.txt bixiaopeng@bixiaopengtekiMacBook-P ...
- 关于scrollTop获取卷曲距离的三种方式- --兼容代码如下
对于不同浏览器而言--获取卷曲距离方式可能有所不一样---下面提供三种方式--- scrollTop1 = window.pageYoffset || document.documentElement ...
随机推荐
- 【CodeChef EDGEST】Edges in Spanning Trees(树链剖分+树上启发式合并)
点此看题面 大致题意: 给你两棵\(n\)个点的树,对于第一棵树中的每条边\(e_1\),求存在多少条第二棵树中的边\(e_2\),使得第一棵树删掉\(e_1\)加上\(e_2\).第二棵树删掉\(e ...
- 【ECNU620】数学题(结论题)
点此看题面 大致题意: 求\((n-1)!\ mod\ n\)的值. 大力猜结论 首先,看到样例,我们可以猜测: 当\(n\)为质数时,答案为\(n-1\). 当\(n\)为合数时,答案为\(0\). ...
- MongoDB创建数据库和删除数据库05-14学习笔记
MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写,是一个基于分布式文件存储的开源数据库系统.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关 ...
- LeetCode 94:二叉树的中序遍历 Binary Tree Inorder Traversal
题目: 给定一个二叉树,返回它的中序 遍历. Given a binary tree, return the inorder traversal of its nodes' values. 示例: 输 ...
- ssh工具推荐MobaXterm 可能是你遇到过的比较出色的一款
之前一直用xshell,现在推荐一个更好用的工具. 一站式的解决你的需求,而且画风个人也比较喜欢,而且随便一百度就能找得到green PJ 的版本
- 数据持久化之Data Volume
废话不多说直接操作 1.启动一个MySQL测试容器 [root@localhost labs]# docker pull mysql #下载MySQL镜像 [root@localhost labs]# ...
- Window权限维持(三):服务
如果未正确配置Windows环境中的服务或这些服务可以用作持久性方法,则这些服务可能导致权限提升.创建一个新的服务需要管理员级别的特权,它已经不是隐蔽的持久性技术.然而,在红队的行动中,针对那些在威胁 ...
- Triangulation by Ear Clipping(耳切法处理多边形三角划分)(转载)
转载自: https://www.cnblogs.com/xignzou/p/3721494.html 使用EarClipping三角化多边形(翻译) ---Triangulation by Ear ...
- Linux目录和文件——管理目录和文件的命令
Linux目录和文件——管理目录和文件的命令 摘要:本文主要学习了Linux系统中关于目录和文件的操作. cd命令 cd命令用来切换工作目录,是Change Directory的缩写. 基本语法 cd ...
- mask-rcnn代码解读(七):display(self)函数的解析
如和将class中定义的变量打印或读取出来,受maskrcnn的config.py的启示,我将对该函数进行解释. 我将介绍该函数前,需要对一些名词进行解释,如下: ①Ipython:ipython是一 ...