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汇编语言程序设计
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汇编语言程序设计
例: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汇编语言子程序设计
过程与过程调用相关汇编语句
过程调用与返回指令
过程调用指令 段内直接调用的过程调用指令 段内间接调用的过程调用指令 段间直接调用的过程调用指令 段间间接调用的过程调用指令 过程调用指令属于“程序控制”指令组 过程调用指令不影响任何标志 过程调用指令所完成的操作: 将当前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位汇编程序设计
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.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计算机系统组织
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章.
说明:输入一个字符后,不需要回车。若只键入回车,则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 字符与字符串的输入/输出方法
80x86汇编语言程序设计
80x86汇编语言程序设计80x86汇编语言程序设计是一门专门研究如何使用汇编语言在80x86架构的计算机上编写程序的学科。
80x86架构是Intel公司开发的一种微处理器架构,它包括了8086、80286、80386、80486等处理器,以及后来的Pentium系列。
汇编语言是一种低级语言,它与机器语言非常接近,通常用于编写性能要求极高的程序或者进行底层系统开发。
汇编语言基础汇编语言的指令与机器指令一一对应,但使用助记符来代替二进制代码,使得程序更加易于编写和理解。
汇编语言的基本元素包括指令、寄存器、内存地址和立即数。
- 指令:是汇编语言的基本操作单位,用于执行特定的操作,如数据传输、算术运算、逻辑运算等。
- 寄存器:是CPU内部的存储单元,用于快速存取数据。
80x86架构有多个寄存器,包括通用寄存器、段寄存器、指令指针寄存器等。
- 内存地址:是存储在RAM中的数据的位置,汇编语言可以通过内存地址访问和操作数据。
- 立即数:是指令中直接给出的数值,不需要通过寄存器或内存地址访问。
汇编语言指令80x86汇编语言提供了丰富的指令集,用于执行各种操作。
以下是一些基本的指令类型:- 数据传输指令:如MOV(移动数据)、PUSH(将数据压入堆栈)、POP(从堆栈中弹出数据)等。
- 算术指令:如ADD(加法)、SUB(减法)、MUL(乘法)、DIV(除法)等。
- 逻辑指令:如AND(逻辑与)、OR(逻辑或)、NOT(逻辑非)、XOR (逻辑异或)等。
- 控制流指令:如JMP(无条件跳转)、JE(等于时跳转)、JNE(不等于时跳转)、LOOP(循环)等。
汇编程序结构一个典型的汇编程序包括以下部分:1. 程序声明:声明程序的名称和起始点。
2. 数据定义:定义程序中使用的数据和常量。
3. 代码段:包含程序的指令和逻辑。
4. 堆栈段:用于存储临时数据和调用函数时的参数。
5. 常量段:定义程序中使用的常量。
6. 外部引用:引用其他程序或库中的代码和数据。
80x86汇编语言程序设计 第4章汇编语言程序格式
; 字节操作指令,将0作为1个字节送到地址OP1 + 1
MOV OP2 + 2, 0
; 字操作指令,将0作为1个字送到地址OP2 + 2
然而,下列两条指令是错误的:
MOV OP1, AX
; 类型不匹配
MOV OP2, AL
; 类型不匹配
若希望进行与变量类型不一致的操作,例如,对字变量实施字节操作,如何处理?
实际上,数据段之所以成为数据段,是由于DS指向它。由于程序运行时可以改变DS的值, 使得任何段都可以成为数据段。因此,当程序定义一个段后,需要告诉汇编器该段的段地址 在哪个段寄存器中。ASSUME就提供这种信息。
2020/9/5
80x86汇编语言程序设计
4.3 基本伪指令
6. 源程序结束伪指令
基本形式: END 地址
符号名
=
常数表达式
功能:给表达式指定一个等价的符号名。
说明:
(1)= 后的表达式只能是常数,对于字符或字符串,汇编时按整数处理。例如:
COUNT
=
20
MOV CX, COUNT
; 等价于MOV CX, 20
(2)EQU后的表达式可以是数值、字符串、寄存器名、指令助记符等。
(3)EQU不能重复定义,而 = 可重复定义,其作用域从定义点到重新定义之前。
ADDR2 DD
X
; ADDR2的高字为X的段地址,低字为X的偏移地址
2020/9/5
80x86汇编语言程序设计
4.3 基本伪指令
(4)MASM是强类型的。变量在定义后,其类型便被确定,使用时要注意类型匹配。例如:
OP1
DB
?, ?
OP2
DW
第3部分80x86汇编语言程序设计方案上16位汇编版本资料精品文档
默认段选择规则
访存类型 所用段及寄存器
现代微机原理与接口技术
缺省选择规则
指令
代码段 SS
所有的堆栈的进栈和出栈
任何用ESP或EBP或BP作 为基址寄存器的访存
目的串 附加数据段 ES 串处理指令的目的串
局部数据
数据段 DS
除相对于堆栈以及串处理的 目的串以外的所有数据访问
AX寄存器 MOV AX, ES:[10H]; ES段10H处的一个字的数据赋给
AX寄存器
不允许使用段超越前缀的情况:
(1)串操作指令的目的串必须用ES段 (2)PUSH指令的目的和POP指令的源必须用SS段 (3)程序的指令必须存放在CS段
8
/
现代微机原理与接口技术
其中[ ]表示可选项;
3.1.1 操作数寻址
80x86的操作数寻址方式有: 1、立即寻址 2、寄存器寻址 3、存储器寻址 4、端口寻址
2
/
现代微机原理与接口技术
我们首先讨论两种与存储器无关的寻址方式:
1、立即寻址 操作数以常量形式直接放在指令中,紧跟在操作码之后
+ 10A5H 221FDH
1234H AX
/
现代微机原理与接口技术
2)基址变址相对寻址 操作数的有效地址是一个基址寄存器的内容、
一个变址寄存器的内容及位移量之和
指
令
基址寄存器变址寄存器位移量
变址寄存器 变址值
段基地址
存储器
+ EA +
操作数
基址值 基址寄存器
现代微机原理与接口技术
变址寻址示例 MOV CX, 6020H[SI] (或[SI+6020H]) MOV DX, COUNT[SI] ; COUNT是符号地址
80x86汇编语言程序设计 概述及解释说明
80x86汇编语言程序设计概述及解释说明1. 引言1.1 概述在计算机科学领域中,汇编语言是一种与计算机硬件直接交互的低级语言。
它通过使用特定的指令集和对应的操作码,与硬件进行通信和控制。
80x86汇编语言是一种针对Intel 8086微处理器系列的汇编语言。
本文将介绍80x86汇编语言程序设计的基本概念、语法规则以及开发环境与工具。
1.2 文章结构本文将按照如下结构进行介绍:- 引言部分(当前部分)将提供关于文章内容和结构的总体说明。
- 在第二部分中,我们将概述汇编语言的基本概念,并详细介绍80x86架构。
- 第三部分将重点介绍程序开发环境与工具,包括常用的编译、链接和调试工具,并提供搭建开发环境的指南。
- 第四部分将涵盖80x86汇编语言的基本概念和常用语法指南,包括数据类型和寻址方式、寄存器和标志位、以及指令集和汇编指令格式等内容。
- 第五部分我们将通过程序设计实例分享一些技巧,包括简单程序示例及解释、循环结构及优化技巧分享,以及数组与字符串处理技巧。
- 最后,在结论部分将总结回顾本文的主要内容,并对80x86汇编语言程序设计在未来的发展提出展望,同时引出一些问题供读者思考。
1.3 目的本文的目的是为读者提供一个全面且系统性的80x86汇编语言程序设计概述与解释说明。
通过阅读本文,读者将了解到80x86汇编语言的基本概念和语法规则,并掌握相关开发环境和工具的使用。
同时,通过实例和技巧分享,读者能够加深对80x86汇编语言程序设计的理解,并应用于实际项目中。
我们希望读者能够通过本文学习到更多关于80x86汇编语言程序设计方面的知识,并在日后的学习与工作中能够灵活运用这些知识。
2. 80x86汇编语言程序设计概述2.1 汇编语言简介汇编语言是一种低级的计算机编程语言,它使用助记符来代表计算机的机器指令。
与高级编程语言相比,汇编语言更接近计算机底层硬件的操作,可以对计算机进行更细粒度的控制和优化。
(完整版)(整理)《80x86汇编语言程序设计》教案及答案.
(完整版)(整理)《80x86汇编语言程序设计》教案及答案.《汇编语言程序设计》教案附:习题参考答案《IBM-PC汇编语言程序设计》(第2版)沈美明、温冬婵编著教案编写时间:2007年8月18日前言1.汇编语言是计算机能提供给用户的最快而又最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言。
2.汇编语言程序设计是高等院校电子计算机硬、软件及应用专业学生必修的核心课程之一。
它不仅是计算机原理、操作系统等其它核心课程的必要先修课,而且对于训练学生掌握程序设计技术、熟悉上机操作和程序调试技术都有重要作用。
3.本教材共有十一章,其内容安排如下:(1).第一、二章为汇编语言所用的基础知识。
(2).第三章详细介绍80x86系列CPU的指令系统和寻址方式。
(3).第四章介绍伪操作、汇编语言程序格式及汇编语言的上机过程。
(4).第五、六章说明循环、分支、子程序结构和程序设计的基本方法。
(5).第七章说明宏汇编、重复汇编及条件汇编的设计方法。
(6).第八章叙述输入/输出程序设计方法,重点说明中断原理、中断过程及中断程序设计方式。
(7).第九章说明BIOS和DOS系统功能调用的使用方法。
(8).第十~十一章分别说明图形显示、发声及磁盘文件存储的程序设计方法,同时提供各种程序设计方法和程序实例。
附:教学参考书1.沈美明、温冬婵编著,IBM–PC汇编语言程序设计(第2版),清华大学出版社,2001年(教材)2.沈美明、温冬婵编著,IBM–PC汇编语言程序设计,清华大学出版社,1991年3.沈美明、温冬婵编著,IBM–PC汇编语言程序设计—例题习题集,清华大学出版社,1991年6月4.沈美明、温冬婵、张赤红编著,IBM–PC汇编语言程序设计—实验教程,清华大学出版社,1992年5.周明德,微型计算机IBM PC/XT(0520系列)系统原理及应用(修订版),清华大学出版社,19916.郑学坚、周斌,微型计算机原理及应用(第二版),清华大学出版社,19957.王士元、吴芝芳,IBM PC/XT[长城0520] 接口技术及其应用,南开大学出版社,19908.杨素行,微型计算机系统原理及应用,清华大学出版社,19959.戴梅萼、史嘉权,微型计算机技术及应用—从16位到32位(第二版),清华大学出版社,199610.张昆藏,IBM PC/XT微型计算机接口技术,清华大学出版社,199111.孟绍光,李维星,高档微机组成原理及接口技术(80386/80486/Pentium),学苑出版社,199312.吴秀清,周荷琴,微型计算机原理与接口技术,中国科学技术大学出版社目录第 1 章基础知识 (5)1.1进位计数制与不同基数的数之间的转换 (5)1.2二进制数和十六进制数的运算 (6)1.3计算机中数和字符的表示 (7)1.4几种基本的逻辑运算 (7)第 2 章80X86计算机组织 (8)2.180X86微处理器 (8)2.2基于微处理器的计算机系统构成 (8)2.3中央处理机 (9)2.4存储器 (10)2.5外部设备 (11)第 3 章80X86的指令系统和寻址方式 (12)3.180X86的寻址方式 (12)3.2程序占有的空间和执行时间 (14)3.380X86的指令系统 (14)第 4 章汇编语言程序格式 (31)4.1汇编程序功能 (31)4.2伪操作 (31)4.3汇编语言程序格式 (35)4.4汇编语言程序的上机过程 (38)第 5 章循环与分支程序设计 (40)5.1循环程序设计 (40)5.2分支程序设计 (41)5.3如何在实模式下发挥80386及其后继机型的优势 (41)第 6 章子程序结构 (43)6.1子程序的设计方法 (43)6.2子程序的嵌套 (44)6.3子程序举例 (44)第7 章高级汇编语言技术 (46)7.1宏汇编 (46)7.2重复汇编 (47)7.3条件汇编 (48)第8 章输入/输出程序设计 (49)8.1I/O设备的数据传送方式 (49)8.2程序直接控制I/O方式 (50)8.3中断传送方式 (50)第9 章BIOS和DOS中断 (53)9.1键盘I/O (53)9.2显示器I/O (55)9.3打印机I/O (56)9.4串行通信口I/O (57)第10 章图形与发声系统的程序设计 (58)10.1显示方式 (58)10.2视频显示存储器 (58)10.3EGA/VGA图形程序设计 (59)10.4通用发声程序 (60)10.5乐曲程序 (61)第11 章磁盘文件存取技术 (62)11.1磁盘的记录方式 (62)11.2文件代号式磁盘存取 (63)11.3字符设备的文件代号式I/O (64)11.4BIOS磁盘存取功能 (65)附录:《IBM—PC汇编语言程序设计》习题参考答案 (66) 第一章.习题 (66)第二章.习题 (67)第三章.习题 (68)第四章.习题 (81)第五章.习题 (86)第六章.习题 (104)第七章.习题 (117)第八章.习题 (124)第九章.习题 (129)第十章.习题 (132)第十一章.习题 (143)第 1 章基础知识【教学目的】本章内容是本课程的基础,通过本章学习,使学生明确汇编语言程序设计的学科性质、基本内容和学习意义,掌握数制的转换、数据的编码,了解本门课程的教学要求和学习方法。
第二章 80x86汇编语言程序设计
0、8、16位 0、8、16、32位
存储器物理地址生成中的相关约定:
a.访存操作选择默认段寄存器规则—
取指操作和相对IP寻址的访存操作—代码段CS,
堆栈操作和用ESP/EBP为基址的访存操作—堆栈段SS, 串处理指令的目的串的访存操作—附加数据段ES, 除堆栈和串处理的除目的串外的访存操作—数据段DS。
10
示例1:MOV AL, [BX] ;PA=(DS)*10H+(BX) MOV AX,CS:[SI];PA=(CS)*10H+(SI) MOV ECX, [EDX];PA=(EDS)*10H+(EDX) MOV AH, [BP] ;PA=(SS)*10H+(BP) 示例2:MOV AH, [BP] MOV BX, [SI] 设(SS)=100H,(DS)=200H,(BP)=0B0H,(SI)=2AH
14
8、比例变址寻址
操作数的有效地址为相对于指令所指定的变址REG内 容和比例因子相乘的地址的偏移地址, 即:EA=(变址REG)*比例因子+位移量。 寄存器的使用限制—
与基址变址寻址方式中变址REG限制相同。
示例:MOV AX, 200H[ESI*8] 若(DS)=2000H,(ESI)=4 则PA=(DS)*10H+(ESI)*4+200H=20220H 应用:适合于对结构数组等复杂结构元素的访问。
AH, BL DS, AX SI, AX ECX, EDX
;(BL)→AH ;(AX)→DS ;(AX)→SI ;(EDX)→ECX
错误示例: MOV CS, AX ;CS不能为MOV目的寄存器 MOV IP, BX ;IP不能做MOV目的寄存器 MOV AX, CL ;目的与源REG类型(位数)不同 MOV BH, DX ;目的与源REG类型(位数)不同 应用:适合于对频繁使用的数据的操作。
80X86汇编语言程序设计教程+课后习题答案(清华大学版)
80X86汇编语言程序设计教程+课后习题答案(清华大学版)第二章答案tarzan版题2.18086/8088通用寄存器的通用性表现在何处?8个通用寄存器各自有何专门用途?哪些寄存器可以做为存储器串行方式的指针寄存器?请问:8086/8088通用寄存器的通用性整体表现在:这些寄存器除了各自规定的专门用途外,他们均可以用于传送和暂存数据,可以保存算术逻辑运算中的操作数和运算结果;8个通用寄存器的专门用途如下:ax字乘法,字除法,字i/obx存储器指针cx串成操作方式或循环掌控中的计数器dx字乘法,字乘法,间接i/osi存储器指针(串成操作方式中的源指针)di存储器指针(串成操作方式中的目的指针)bp存储器指针(读取堆栈的指针)sp堆栈指针其中bx,si,di,bp可作为存储器寻址方式的指针寄存器题2.2从程序员的角度,8086/8088存有多少个可以出访的16十一位寄存器?存有多少个可以出访的8十一位寄存器?请问:从程序员的角度,8086/8088存有14个可以出访的16十一位寄存器;存有8个可以出访的8十一位寄存器;题2.3寄存器ax与寄存器ah和al的关系如何?请写出如下程序片段中每条指令执行后寄存器ax的内容:movax,1234hmoval,98hmovah,76haddal,81hsubal,35haddal,ahadcah,aladdax,0d2hsubax,0ffh请问:movax,1234hax=1234hmoval,98hax=1298hmovah,76hax=7698haddal,81hax=7619hsubal,35 hax=76e4haddal,ahax=765ahadcah,alax=d15ahaddax,0d2hax=d22chsubax,0ffhax=d12dh题2.48086/8088标志寄存器中定义了哪些标志?这些标志可分为哪两类?如何改变这些标志的状态?答:8086/8088标志寄存器中定义了9个标志,如下:cf:carryflagzf:zeroflagsf:signflagof:overflowflagpf:parityflagaf:auxiliarycarryflagdf:directionflagif:interrupt-enableflagtf:trapflag这些标志可分为两类,分别为:1、运算结果标志;2、状态控制标志;使用指令sahf可以把ah中的选定位送至标志寄存器高8十一位sf、zf、af、pf、cf;使用clc可以去除cf,复置cf至0使用stc弯叶cf至1使用cld弯叶df至0使用std弯叶df至1使用cli弯叶if至0采用sti可置if到1另外,在某些指令继续执行过程中可以发生改变部分标志的状态;题2.5恳请说道说道标志cf和标志of的差异。
80x86汇编语言程序设计资料.
2、设计单元电路
设计单元电路的一般方法和步骤如下: (1) 根据设计要求和已选定的总体方案原理框图,确定对各 单元电路的设计要求,拟定主要单元电路的性能指标、与前后 级之间的关系、分析电路的构成形式。应注意各单元电路之间 的相互配合,注意各部分输入信号、输出信号和控制信号的关 系。 (2) 拟定好各单元电路的要求后,按信号流程顺序分别设计 各单元电路。 (3) 选择单元电路的组成形式。一般情况下,应查阅有关资 料,以丰富知识,开阔眼界, 从已掌握的知识和了解的各种电路中选择一个合适的电路。 如确实找不到性能指标完全满足要求的电路时,也可选用与设 计要求比较接近的电路,然后调整电路参数。 在单元电路的设计中特别要注意保证各功能块协调一致地 工作。
课题二 简易信号发生器设计
一、设计目的 1、掌握信号发生器的设计方法和测试技术。 2、了解单片函数发生器IC8038的工作原理和 应用。 3、学会安装和调试分立元件与集成电路组成 的多级电子电路小系统。
二、设计技术指标与要求 1、 设计要求 1、电路能输出正弦波、方波和三角波等三种波形; 2、输出信号的频率要求可调; 3、拟定测试方案和设计步骤; 4、根据性能指标,计算元件参数,选好元件,设计电 路并画出电路图; 5、测量输出信号的幅度和频率; 、写出设计报告。 扩展要求:输出信号的幅度和频率要求连续可调,幅 度范围为0-5V,频率范围100Hz-10KHz。 2、 技术指标 频率范围:100Hz-1KHz,1Kz-10KHz;输出电压:方波 VP-P≤24V,三角波VP-P=6V,正弦波VP-P=1V;方波tr小 于1uS。
课题三 音响放大器的设计
一、设计目的 1、解集成功率放大器内部电路工作原理 2、掌握其外围电路的设计与主要性能参 数测试方法 3、掌握音响放大器的设计方法与电子线 路系统的装调技术
《80x86汇编语言程序设计》(第2版)习题答案
习题参考答案1第1章1-1汇编的主要功能:输入:汇编语言源文件输出:目标文件处理:对源文件进行语法检查;将符号指令翻译为机器指令。
连接的主要功能:输入:1个或多个目标文件与库文件输出:可执行文件处理:浮动地址的重定位;多模块的连接。
1-2 (1)2EH (2)0D2H (3)0FFH(4)80H (5)7FH (6)0FEH1-3 (1)7FH (2)0FF80H (3)0FFFFH285286(4)0FFD2H (5)8000H (6)0FFH1-4 无符号数范围:0~2n-1;带符号数范围:-2n−1~2n−1-11-5 (1)压缩BCD码:58H;非压缩BCD码:x5x8H。
(2)压缩BCD码:1624H;非压缩BCD码:x1x6x2x4H。
1-6 (1)字符'1'的ASCII码;十进制数31的压缩BCD码;十进制数1的非压缩BCD码;十进制数49的十六进制表示。
(2)十进制数-1的8位二进制补码表示;带符号数255的16位二进制补码表示;无符号数255的8位二进制形式。
(3)十进制数-1的16位二进制补码表示;带符号数65535的32位二进制补码表示;无符号数65535的16位二进制形式。
1-7 (1)作为无符号数为159,等值的16位和32位形式均为9FH;作为带符号数为-97,等值的16位和32位形式分别为0FF9FH与0FFFFFF9FH。
(2)作为无符号数和带符号数均为104,等值的16位和32位形式均为68H。
(3)作为无符号数为192,等值的16位和32位形式均为0C0H;作为带符号数为-64,等值的16位和32位形式分别为0FFC0H与0FFFFFFC0H。
1-8 (1)AND 0FH (2)OR 30H(3)右移4位可得高位的值;将原值AND 0FH可得低位的值。
(4)XOR 00101010B(5)AND 8000H,若结果为0,则是正数,否则为负数。
第2章2-1 系统总线是CPU与内存和I/O子系统之间进行数据交换的通道,包括数据总线、地址总线和控制总线,分别负责在CPU与内存和I/O子系统之间传送数据、地址和控制信息。
80x86汇编语言简单应用程序设计
串处理与80x86汇编语言程序设计 串处理与80x86汇编语言程序设计
80x86的基本串处理指令 80x86的基本串处理指令
字符串装入指令( LOAD String )— 字符串装入指令 字符串装入指令( 的格式如下: 的格式如下: LODSB 装入字节(Byte) ;装入字节(Byte) LODSW ;装入字(Word) 装入字(Word) 字符串装入指令把字符串中的一个“字符” 字符串装入指令把字符串中的一个“字符”装入到累加 AL/AX/EAX) 器(AL/AX/EAX)中 字节装入指令LODSB把寄存器 所指向的一个字节数据 把寄存器SI 字节装入指令LODSB把寄存器SI所指向的一个字节数据 装入到累加器AL中 然后根据方向标志DF复位或置位使 复位或置位使SI 装入到累加器AL中,然后根据方向标志DF复位或置位使SI 之值增1或减1 它类似于下面两条指令: 之值增1或减1。它类似于下面两条指令: MOV AL, [SI] AL, INC SI (DF = 0) 0) 或 DEC SI (DF = 1) 1)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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与输入的数字量成比例,