80x86汇编语言程序设计汇总

合集下载

80x86汇编语言程序设计

80x86汇编语言程序设计

指令RET(Return):过程返回 (2)RET指令 ) 指令 ( ) 语法格式: 语法格式: RET RET imm16 ; 近返回或远返回 imm16 ; 近返回或远返回 , 并调整堆栈 : SP = SP + 近返回或远返回, 并调整堆栈:
功能描述: 功能描述: RET:返回地址出栈,从而实现转移到返回地址处。其中, :返回地址出栈,从而实现转移到返回地址处。其中, 远返回: 个双字到CS:IP。 远返回:POP 1个双字到 个双字到 。 近返回: 个字到IP。 近返回:POP 1个字到 。 个字到 RET imm16:在返回地址出栈后,CPU立即将 立即将imm16加到堆栈 :在返回地址出栈后, 立即将 加到堆栈 指针SP。这种机制用来在返回前将参数从栈中移出。 指针 。这种机制用来在返回前将参数从栈中移出。 对标志位的影响: 对标志位的影响:无。 说明: 由汇编程序根据其所在过程的类型( 说明 :RET由汇编程序根据其所在过程的类型( NEAR或FAR) 由汇编程序根据其所在过程的类型 或 ) 决定是近返回还是远返回。缺省为近返回。 决定是近返回还是远返回。缺省为近返回。
LOOP lab2 lab1:MOV AH,4CH INT cseg ENDS END main 21H
【例6.2】编写一个子程序,对一个无符号的字型数组的各元素求和。在调 】编写一个子程序,对一个无符号的字型数组的各元素求和。 用子程序之前,已把数组的段地址放在 中 起始偏移地址放在寄存器SI 用子程序之前,已把数组的段地址放在DS中,起始偏移地址放在寄存器 数组元素个数(>0)放在 中。要求子程序把计算结果以双字的形式存 放在CX中 中,数组元素个数 放在 高位放在DX中 低位放在AX中 放,高位放在 中,低位放在 中。 sum PROC NEAR PUSH XOR MOV MOV BX AX,AX DX,AX BX,AX ;求和前先把存放结果的 求和前先把存放结果的DX,AX清0 求和前先把存放结果的 清 ;保护用到的寄存器 保护用到的寄存器BX 保护用到的寄存器

80x86汇编语言程序设计

80x86汇编语言程序设计
ADD AX, ES: [BX+200H] ;访问附加数据段,从[BX+200H] 取一字与AX相加 -> AX
3.1 寻址方式与指令格式
3.1.2 寻址方式 1. 操作数寻址
(3)存储器寻址(Memory Addressing) (d)变址寻址(Indexed Addressing) MOV AL, [CX*2+10H] ; 访问数据段
设32位的目的操作数存放在DX和AX中,DX存放高位字,
32位源操作数存放在BX和CX中,BX存放高位字
CF
ADC
ADD
DX
AX
+ BX
CX
DX
AX指令序列为: ADD NhomakorabeaX, CX ;低位加 ADC DX, BX ;高位加
ADC指令示例——双字加法:
执行前(DX)=0418H, (AX)=0F365H (BX)=1005H, (CX)=0E024H
MOV AX,DATAS MOV DS,AX LEA DX,STRING MOV AH,9 INT 21H MOV AH,4CH INT 21H CODES ENDS END START
3.2.2 汇编语言程序上机过程
步骤2 利用masm.exe将源程序(*.asm)汇编为目标文件(*.obj);
第3章 80x86汇编语言程序设计
3.0 汇编语言
3.0.1 基本概念 1. 机器码(Machine Code)
以二进制代码形式表示的计算机能执行的指令
2. 汇编语言( Assembly Language)
用于助记机器码,与机器指令一一对应
汇编源程序 (汇编语言)
汇编程序 (Assembler)

80X86汇编语言程序设计

80X86汇编语言程序设计
MOV WORD PTR[DI],0 而 MOV [DI],0 ;类型不定
例:STRI1 DW
? ;定义为字类型
可用如下语句:
PP EQU BYTE PTR STRI1
QQ EQU BYTE PTR STRI1+1
通过PP,QQ把STRI1和STRI1+1又规定为字节类型。
MOV STRI1,AX
则:TYPEBUFER2等于2LENGTH BUFFER2
等于200
SIZE
BUFFER2
等于400
(5)合成运算符
用来建立或临时改变变量或标号的类型或存储器操作的存储单 元类型。包括:PTR、THIS、SHORT。
PTR运算符 用来指定或修改存储器操作数的类型,通常和伪指令BYTE、 WORD等连起来使用。 例:MOV BYTE PTR[DI],0
–宏指令语句 它是一个指令序列,汇编时凡有宏指令语 句的地方都将用相应的指令序列的目标代码插入。
指令性语句是计算机可执行的,而伪指令不能执行,用
来定义变量,分配存储单元,指示程序开始和结束等。
这两种语句的差别: 在形式上:带不带冒号,是否可转向它. 在本质上:汇编时能否形成对应的机器码.
2.语句的格式
第4章 80X86汇编语言程序设计
• 本章的内容有: –MASM宏汇编语句结构以及开发过程 –MASM汇编语言表达式、运算符 –程序段的定义和属性 –复杂数据结构 –宏汇编 –基本汇编语言程序设计 –子程序设计 –高级汇编语言程序设计
4.1 MASM宏汇编语句结构以及开发过程
4.1.1 汇编语言程序的语句类型和格式 1.语句的类型
MASM提供等价机制,用来为常量定义符号名,符号 定义伪指令有“EQU”和“=”

80x86汇编语言子程序设计

80x86汇编语言子程序设计

过程与过程调用相关汇编语句
过程调用与返回指令
过程调用指令 段内直接调用的过程调用指令 段内间接调用的过程调用指令 段间直接调用的过程调用指令 段间间接调用的过程调用指令 过程调用指令属于“程序控制”指令组 过程调用指令不影响任何标志 过程调用指令所完成的操作: 将当前IP/EIP 内容(返回地址)压入堆栈 转移控制到被调用过程
过程与过程调用相关汇编语句
子程序的组织
汇编语言提供两条伪指令语句供组织一个过程的代码: 过程定义开始伪指令语句PROC 过程定义结束伪指令语句ENDP 过程定义开始伪指令语句放在一个过程的“体” (所 有内容)之前,过程定义结束伪指令语句放在一个过程的‚ 体‛之后,如同 一对括号括起一个过程的内容 过程定义开始伪指令语句的格式: 过程名 PROC [NEAR | FAR] 过程定义结束伪指令语句的格式: 过程名 ENDP ―[NEAR | FAR]‖用于指出一个过程的“类型” ,过程 的缺省类型为“NEAR‖ (近过程)
过程与过程调用相关汇编语句
作为一个面向数据处理应用设计的系列处理机,80x86 的 子程序支持机制是颇具特色的。它既考虑了子程序作为一个 软件产品的独立组成模块的软件工程需求,也考虑了其作为 一个独立模块内部构件的程序实现需求;既考虑了直接的子 程序调用的编程需要,也考虑了间接的子程序调用的编程需 求;既考虑了子程序返回时的简单控制转移,也考虑了使用 堆栈传递参数情况下返回控制时的堆栈平衡的需要。学生在 掌握这部分相关知识时,应当注意对之的系统把握。本节将 讨论以下几个问题:
过程与过程调用相关汇编语句
过程调用与返回指令
段间间接调用的过程调用指令 指令格式: CALL < 操作数> 指令中的<操作数>在16位机器中为“双字”类型, 只能是存储器操作数,存储器操作数的5种寻址方式均 可用;当操作数的寻址方式为“直接寻址”时,除非已 明确其类型为“双字” ,否则,应使用“DWORD PTR‖指定其类型;其它情况下,通常使用“DWORD PTR‖来指定其类型 8086/88机器完成的操作: (SP)- 2 →SP,(CS)→(SP) (SP)- 2 →SP,(IP)→(SP) (参数值高16位)→ CS (参数值低16位) → IP

80X86 32位汇编程序设计

80X86 32位汇编程序设计

Calling Convention

Windows ABI
Windows 定义了 3 种 Call Convention

C calling convention (__cdecl)

编译器默认的 calling convention WinAPI 的 calling convention 不常用
– –

387 浮点运算指令 (80 位 )
80x86 指令集概述

必须学习的指令

基本指令 SSE/SSE2/SSE3 特权指令 387 , MMX , 3DNow
● ●

有兴趣可以选学的指令
– –

不太值得学习的指令

将要被 SSE 系列指令淘汰 387 指令非常难用
80x86 处理器模式
32 位汇编与 16 位汇编的区别
80X86 32 位汇编程序设计
仲力 沈英哲 2006.4.21
Outline

80x86 指令概述 Windows 下的 32 位汇编


ABI & Examples

386 Linux 下的汇编 Optimization Guide x86-64(AMD64, Intel EMT64) Advanced topics and bibliography
– – –

标准 C 库 libc(printf, ...) Win32API POSIX API
Application Binary Interface

为了能和 C 语言互相调用,汇编程序必须符合 OS 规定的 ABI 规范。 ABI 规范一般包括

汇编语言程序设计_第3章 80x86指令系统

汇编语言程序设计_第3章 80x86指令系统

3.3.2 算术指令
1. 加法
一般形式:
ADD dest, src ; dest = dest + src
ADC dest, src ; dest = dest + src + CF
INC
dest
; dest = dest + 1
语法格式:
ADD reg/mem, reg/mem/imm
ADC reg/mem, reg/mem/imm
movsx ax, al ; 等价于cbw movsx eax, ax ; 等价于cwde movsx eax, al ; 等价于顺序执行cbw与cwde
2019/8/26
80x86汇编语言程序设计
3.3.1 数据传送指令
(3)MOVZX 一般形式: MOVZX dest, src ; src零扩展为dest;386新增 语法格式: MOVZX reg16, reg8/mem8 MOVZX reg32, reg8/mem8/reg16/mem16
2019/8/26
80x86汇编语言程序设计
3.3.1 数据传送指令
5. 堆栈操作指令
80x86系统的堆栈具有如下特点: 堆栈是在内存的堆栈段中,具有“先进后出”的特点。 堆栈只有一个出入口,即当前栈顶。当堆栈为空时,栈顶和栈底指向同一内存单
元。 堆栈有两个基本操作:PUSH(进栈)和POP(出栈)。PUSH操作使栈顶向低地
INC
reg/mem
对标志位的影响:
ADD、ADC:按一般规则影响CF、OF、SF和ZF。 INC:不影响CF,其它同ADD。 说明:ADD与ADC的2个操作数必须类型匹配,且不能同时是内存操作数。
2019/8/26

80x86汇编语言程序设计 第2章 80x86计算机系统组织

80x86汇编语言程序设计 第2章 80x86计算机系统组织

2020/9/5
80x86汇编语言程序设计
1. 状态标志取值的一般规则
▪ ZF(Zero Flag):零标志。若运算结果为0,则ZF = 1,否则ZF = 0。
▪ SF(Sign Flag):符号标志。若运算结果为负数,则SF = 1,否则SF = 0。
▪ CF(Carry Flag):进位标志。若加法时结果最高位向前有进位或减法时最高位向 前有借位,则CF = 1,否则CF = 0。
第2章 80x86计算机系统组织
讲授要点
▪ 80x86计算机的基本结构(CPU、内存、I/O以及连接它们的总线)。 ▪ 80x86 CPU的寄存器组。 ▪ 实模式的内存分段与编程要点。 ▪ 标志位CF、OF、SF、ZF的含义及判断方法。
2020/9/5
80x86汇编语言程序设计
2.1 80x86计算机的基本结构
▪ 在实模式下,32位CPU下的程序可以使用32位寄存器和32位操作数,但采用32位寄 存器表示偏移地址时,只使用低16位,高16位为0。CS:IP总是指向下一条要执行的指 令,EIP的高16位为0。SS:SP指向堆栈段的栈顶,ESP的高16位为0。
▪ 状态标志是CPU进行条件判断和控制程序执行流程的依据,最常用的是4个:CF、OF、 SF和ZF。其中,CF表示无符号溢出,OF表示带符号溢出。
▪ SS:SP指向堆栈段的栈顶地址,ESP的高16位为0。
▪ 在32位80x86 CPU下,程序可以使用32位寄存器和32位操作数,但采用32位寄 存器表示偏移地址时,只使用低16位,高16位为0。
2020/9/5
80x86汇编语言程序设计
2.4 标志位
2.4.1 状态标志
▪ 状态标志通常由CPU根据指令执行结果自动设置,以反映指令执行结果的特 征。 ▪ 80x86 CPU将状态标志作为条件判断的依据,以控制程序的执行流程。 ▪ 最常用的状态标志是CF、OF、SF和ZF,应熟练掌握。

80x86汇编语言程序设计第5章.

80x86汇编语言程序设计第5章.

说明:输入一个字符后,不需要回车。若只键入回车,则AL = 0DH。
2018/9/14
80x86汇编语言程序设计
5.1.2 字符与字符串的输入/输出方法
2. 显示一个字符
功能号:02H 入口参数:DL = 要显示字符的ASCII码 功能:在当前光标位置显示DL中的字符,光标右移。 调用方法示例: mov mov int dl, 'A' ah, 2 21h 说明:显示字符0DH和0AH将产生回车和换行的作用。 ; 显示字符'A'
2018/9/14 80x86汇编语言程序设计
5.4.1 串操作指令及其用途
(2)LODS(Load String):串装入 语法格式: LODSB LODSW LODSD 功能描述: AL/AX/EAX = DS:[SI]; if ( DF = 0 )then SI = SI + size; else SI = SI – size; endif 其中, size = 1(B)、2(W)或4(D)。 也就是说, LODS ( B/W/D )将 DS:SI 所指源串的 1 个元素(字节 / 字 / 双字)复制到 AL/AX/EAX。然后,SI增加或减少1/2/4。若DF = 0,则增加,否则减少。 对标志位的影响:无。
功能:从键盘读入一个字符串,存入DS:DX所指的缓冲区。
调用方法示例: buf db mov 10, ?, 10 dup (?) ax, seg buf ; 定义输入缓冲区
mov
lea mov int
ds, ax
dx, buf ah, 0ah 21h
2018/9/14
80x86汇编语言程序设计
5.1.2 字符与字符串的输入/输出方法
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

4)集成模数转换器(ADC) 打开混合集成器件库,取出模数转换器(ADC),如图 所示。在实验电路工作区搭建实验电路。图中,输入模拟 电压的大小,由设置电压源VIN的大小决定;SOC和OE直 接接+5V工作电源,使ADC能够连续取样和输出;输出二 进制数码以两位十六进制数码显示。 设置VIN=2V,打开仿真开关,进行仿真实验,两位 十六进制数码显示器显示为66。
成比例关系式。 目前常见的D/A转换器中,有权电阻网络D/A转换器,倒T 形电阻网络D/A转换器、权电流型D/A转换器、权电容网络D/A 转换器和开关树型D/A转换器等多种类型。 R-2R倒T形D/A转换器是集成D/A转换器电路中应用最为 广泛的一种。 常用的集成D/A转换器一般都是由倒T形电阻网络、模拟开 关和数据寄存器组成。 A/D转换电路是把连续变化的模拟信号转换成相应的数字信 号的一种电路组成。A/D转换电路通常由取样、保持、量化和编 码四个部分组成。 常用的A/D转换器有并联比较型A/D转换器、逐次比较型 A/D转换器和双积分型A/D转换器等多种类型。
2018/9/14
数字电路实验(江西现代职业技术学院)
设置VREF=10V、VIN=6V,打开仿真开关,进行仿 真测试,两位十六进制数码显示器显示为99。
2018/9/14
数字电路实验(江西现代职业技术学院)
观测仿真实验显示,分析、验证ADC转换器功能,并与 计算出来的理论值进行比较。
2018/9/14
选中8线-3线优先编码器74148,单击“帮助(?)” 按钮,弹出的74148逻辑功能真值表如图所示 。
打开仿真开关,进行仿真实验。注意观测在GS=0, 电路取样编码工作期间,随着输入模拟量Ui的增减变化, 输出数字量对应的增减变化。分析、验证3位并联比较 型A/D转换器功能。
2018/9/14 数字电路实验(江西现代职业技术学院)
当时钟频率为20Hz时,DAC输出电压波形如图所示
对照DAC输出的阶梯形电压波形,分析、验证 DAC的数模转换功能。
2018/9/14 数字电路实验(江西现代职业技术学院)
3)3位并联比较型A/D转换器 由分压电阻、集成运放电压比较器8线-3线优先编码器、 门电路和译码显示电路构成的3位并联比较型A/D转换器如图 所示。
2018/9/14
数字电路实验(江西现代职业技术学院)
电压比较器输出与编码器输出对应关系表
电压比较器输出状态 输入模拟信号
1 )VREF 15
编码器 数字量输出
Q2 0 Q1 0 A2 0 A1 0 A0 0
十进制 数显示
0
Q7 0
Q6 0
Q5 0
Q4 0
Q3 0
(0 ~
(
1 3 ~ )V REF 15 15 3 5 ( ~ )V REF 15 15
2018/9/14 数字电路实验(江西现代职业技术学院)
三、实验步骤
1) 4位R-2R倒T形D/A转换器 在实验工作区搭建实验电路。对应三组4位二进制数, 1111、1110、1101,分别设置模拟开关Si的状态,进行仿真 实验。
2018/9/14
数字电路实验(江西现代职业技术学院)
把所测数据记入表中,分析、验证R-2R倒T形D/A转换 器的工作原理。
数字电路实验(江西现代职业技术学院)
1
0 1
1
1 1
1
1 1
1
1 1
1
1 1
1
1 1
1
1 1
1
0 1
1
1 0
1
5 6
7
13 ( ~ 1)VREF 15
2018/9/14
数字电路实验(江西现代职业技术学院)
从数字器件库中选出74194,按图4.所示在实验电路工 作区搭建实验电路。打开仿真开关,进行仿真实验。
2018/9/14
数字电路实验(江西现代职业技术学院)
输入信号 工作状态 输出电压 U0(V)
D3 D2 D1 D0
I3
I2
I1
I0
I∑
1111
1110
1101
Kv=
2018/9/14 数字电路实验(江西现代职业技术学院)
2)集成数模转换器(DAC) 打开混合集成器件库,取出电压输出型DAC元件 。
在实验电路工作区搭建实验电路。取VREF=12V,输入 的二进制数字量为11011011。打开仿真开关,进行仿真实验, 观测测试数据,分析、验证集成DAC元件的转换功能。
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 1
0 0
1 1
0 1
1 1
1 1
1 1
0 0
0 1
0 1
1 0
1 0
1 0
1 2
3 4
(
5 7 ~ )V REF 15 15
(
7 9 ~ )V REF 15 15 9 11 ( ~ )V REF 15 15 11 13 ( ~ )V REF 15 15
0 0
2018/9/14
数字电路实验(江西现代职业技术学院)
集成数模转换器(DAC)实验电路
在实验工作区用一个十进制加法计数器74160和一个电压 输出型D/A转换器构成一个D/A转换功能测试电路 打开仿真开关,进行仿真实验。 当时钟频率为2Hz时,DAC输出电压波形如图所示:
2018/9/14
数字电路实验(江西现代职业技术学院)
实验九
数模与模数转换电路 EWB仿真实术学院)
一、实验目的
1)熟悉D/A转换与A/D转换的基本概念及其转换关系。 2)了解D/A转换与A/D转换集成器件的使用方法及功能。
2018/9/14
数字电路实验(江西现代职业技术学院)
二、实验说明
D/A转换电路是将输入的数字量转换成模拟量的一种电路组 成,其输出的模拟电压 Uo 或模拟电流 Io与输入的数字量成比例,
相关文档
最新文档