汇编语言基础知识及例题_第1页
汇编语言基础知识及例题_第2页
汇编语言基础知识及例题_第3页
汇编语言基础知识及例题_第4页
汇编语言基础知识及例题_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、与与(Assembly Language & Programming) 嵌入式系统教研室嵌入式系统教研室 什么叫汇编语言什么叫汇编语言1、指令指令是对计算机进行程序控制的最小单位。所有的指令的集合称为计算机的指令系统。2、指令格式指令格式操作码 地址码机器执行什么操作执行对象(具体数、存放位置)3、工作原理工作原理 不断的取指令和执行指令,最后将计算的结果放入指令指定的存储器地址中。例如:ADD AX,BXn汇编语言的特点汇编语言的特点 面向机器的低级语言,通常是为特定的计算面向机器的低级语言,通常是为特定的计算 机或计算机系列机或计算机系列专门设计的。专门设计的。 保持了机器语言的优

2、点,具有直接和简捷保持了机器语言的优点,具有直接和简捷 的特点。的特点。 可有效地访问、控制计算机的各种硬件设备可有效地访问、控制计算机的各种硬件设备, , 如磁盘、存储器、如磁盘、存储器、CPUCPU、I/OI/O端口等。端口等。 目标代码简短,占用内存少,执行速度快,目标代码简短,占用内存少,执行速度快, 是高效的程序设计语言。是高效的程序设计语言。 经常与高级语言配合使用,应用十分广泛经常与高级语言配合使用,应用十分广泛。#include stdafx.h #include stdio.h int main(int argc, char* argv) int a,b,c; a=1; b=

3、2; c=a+b; printf(“c=%dn,c); return 0; 编译后的目标文编译后的目标文件达到件达到3.59KBdata segment a db ? b db ? c db ? string db c=$data endscode segmentmain proc far assume cs:code, ds:data, es:datastart: push ds sub ax,ax push ax mov ax,data mov ds,ax mov es,axmov a,1 mov b,2 mov al,a add al,b mov c,al lea dx,string m

4、ov ah,09 int 21h add c,30h mov dl,c mov ah,2 int 21h mov dl,0ah int 21h mov dl,0dh int 21h retmain endpcode ends end start例例. . C = a + b汇编后的目汇编后的目标文件只有标文件只有208208字节字节系统程序、效率代码、系统程序、效率代码、I/OI/O驱动程序驱动程序70%70%以上的系统软件是用汇编语言编写的。以上的系统软件是用汇编语言编写的。 某些快速处理、位处理、访问硬件设备等某些快速处理、位处理、访问硬件设备等 高效程序是用汇编语言编写的。高效程序是用汇

5、编语言编写的。 高级绘图程序、视频游戏程序一般是用汇高级绘图程序、视频游戏程序一般是用汇 编语言编写的编语言编写的。n 字符的表示字符的表示ASCII码码:用一个字节字节来表示一个字符,低7位为字符的ASCII值,最高位一般用作校验位。标准的标准的ASCII码共码共128个字符,分为可打印个字符,分为可打印ASCII码和非码和非打印打印ASCII码。码。可打印可打印ASCII码:共码:共95个。例如:个。例如: 数字数字09:30H39H 字母字母AZ:41H5AH 字母字母az:61H7AH 空格:空格:20H 非打印非打印ASCII码:用于控制性代码,共码:用于控制性代码,共33个。例如个

6、。例如 回车回车CR:0DH, 换行换行LF:0AH,响铃,响铃BEL:07H nASCII字符编码表字符编码表80 x86计算机组织计算机组织 计算机系统计算机系统 存储器存储器 中央处理机中央处理机 外部设备外部设备1. 计算机系统计算机系统硬件:硬件:中央处理机中央处理机 CPU总线控制 逻辑接 口接 口存储器存储器大容量存储器I/O设备I/O子系统子系统系统总线系统总线.软件:软件:系统软件 用户软件存储器的逻辑地址与物理地址存储器的逻辑地址与物理地址 10011111 00100110 01001000逻辑地址逻辑地址段地址段地址 : 偏移地址偏移地址 1000 : 0000H 10

7、00 : 0001H1000 : 0002H1000 : 0003H1000 : 0004H1000 : 0005H 物理地址物理地址10000H10001H10002H10003H 10004H10005H 10000011 01011100 10100010字节内容(10000H)9FH;(10001H)26H字内容 (10000H)269FH;(10001H)4826H访问两次内存3. 中央处理器中央处理器8086/8088寄存器组:寄存器组:数据寄存器数据寄存器:指针及变址寄存器指针及变址寄存器:SP、BP、SI、DI段寄存器段寄存器: CS、DS、SS、ES控制寄存器控制寄存器: I

8、P、FLAGSCPU组成:算术逻辑部件ALU、 控制器、寄存器 AX BX CX DX AH AL BH BL CH CL DH DL 高8位 低8位标志寄存器标志寄存器 ( FLAGS / PSW ) 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 条件码标志: 控制标志:OF 溢出标志 DF 方向标志 SF 符号标志 IF 中断标志ZF 零标志 TF 陷阱标志CF 进位标志AF 辅助进位标志PF 奇偶标志OF DF IF TF SF ZF AF PF CF例:ADD AX, BX JO / JC ERROR ?OF(ov/nv):Over 溢出 标志位 DF(d

9、n/up):Direction 方向 标志位IF(ei/di):Enable 允许中断 标志位SF(ng/pl):Symbol 符号 标志位ZF(zr/nz):Zero 零 标志位AF(ac/na):Auxiliary 辅助进位 标志位PF(pe/po):Parity 奇偶 标志位CF(cy/nc):Carry 进位 标志位 溢出 OV(溢出) NV(未溢出)零位 ZF(等于零) NZ(不等于零)方向 DN(减少) UP(增加)辅助进位 AC(进位) NA(无进位)中断 EI(许可) DI(禁止)奇偶标志 PE(偶) PO(奇)符号 NG(负) PL(正)进位 CY(进位) NC(无进位) 寄

10、存器与存储器的比较:寄存器与存储器的比较: 寄寄 存存 器器 存存 储储 器器 在在CPU内部内部 在在CPU外部外部访问速度快访问速度快 访问速度慢访问速度慢容量小,成本高容量小,成本高 容量大,成本低容量大,成本低用名字表示用名字表示 用地址表示用地址表示没有地址没有地址 地址可用各种方式形成地址可用各种方式形成 指令系统指令系统 一组指令的集合一组指令的集合80 x86的指令系统和寻址方式的指令系统和寻址方式 操作码操作码 操作数操作数 . 操作数操作数指令指令 寻址方式寻址方式 与数据有关的寻址方式与数据有关的寻址方式 与转移地址有关的寻址方式与转移地址有关的寻址方式1. 8086的寻

11、址方式的寻址方式 与数据有关的寻址方式与数据有关的寻址方式:以以 MOV 指令为例指令为例 立即寻址立即寻址 MOV AX , 3069H寄存器寻址寄存器寻址 MOV AL , BH直接寻址直接寻址 MOV AX , 2000H 寄存器间接寻址寄存器间接寻址 MOV AX , BX 寄存器相对寻址寄存器相对寻址 MOV AX , COUNT SI 基址变址寻址基址变址寻址 MOV AX , BP DI 相对基址变址寻址相对基址变址寻址 MOV AX , MASK BX SI 存储器寻址存储器寻址 数据传送指令数据传送指令 算术指令算术指令 逻辑指令逻辑指令 串处理指令串处理指令 控制转移指令控

12、制转移指令 处理机控制与杂项操作指令处理机控制与杂项操作指令2. 8086的指令系统的指令系统传送指令:传送指令: MOV DST, SRC执行操作:执行操作: (DST) (SRC)注意注意: * DST、SRC 不能同时为段寄存器不能同时为段寄存器 MOV DS, ES * 立即数不能直接送段寄存器立即数不能直接送段寄存器 MOV DS, 2000H * DST 不能是立即数和不能是立即数和CS* DST、SRC 不能同时为存储器寻址不能同时为存储器寻址* 不影响标志位不影响标志位 通用数据传送指令通用数据传送指令MOV AX, DSEGMOV DS, AX算术指令:算术指令: 加法指令加

13、法指令 ADD、ADC、INC 减法指令减法指令 SUB、SBB、DEC、NEG、CMP 乘法指令乘法指令 MUL、IMUL 除法指令除法指令 DIV、IDIV 十进制调整指令十进制调整指令 DAA、DAS、 AAA、AAS、AAM、AAD 加法指令加法指令 加法指令:加法指令: ADD DST, SRC 执行操作:执行操作: (DST) (SRC) + (DST) 带进位加法指令:带进位加法指令: ADC DST, SRC 执行操作:执行操作: (DST) (SRC) + (DST) + CF 加加1指令:指令: INC OPR 执行操作:执行操作: (OPR) (OPR) + 1注意注意:

14、 * 除除INC指令指令不影响不影响CF标志外,均对条件标志位有影响。标志外,均对条件标志位有影响。 减法指令减法指令减法指令:减法指令: SUB DST, SRC 执行操作:执行操作: (DST) (DST) - (SRC)带借位减法指令:带借位减法指令: SBB DST, SRC 执行操作:执行操作: (DST) (DST) - (SRC) - CF减减1指令:指令: DEC OPR 执行操作:执行操作: (OPR) (OPR) - 1求补指令:求补指令: NEG OPR 执行操作:执行操作: (OPR) - (OPR)比较指令:比较指令: CMP OPR1, OPR2 执行操作:执行操作

15、: (OPR1) - (OPR2)注意注意: * 除除DEC指令指令不影响不影响 CF标志外,均对条标志外,均对条 件标志位有影响。件标志位有影响。 乘法指令乘法指令 无符号数乘法指令:无符号数乘法指令: MUL SRC 带符号数乘法指令:带符号数乘法指令: IMUL SRC 执行操作:执行操作: 字节操作数字节操作数 (AX) (AL) * (SRC) 字操作数字操作数 (DX, AX) (AX) * (SRC)注意注意: * AL (AX) 为隐含的乘数寄存器。为隐含的乘数寄存器。* AX (DX,AX) 为隐含的乘积寄存器。为隐含的乘积寄存器。* SRC不能为立即数。不能为立即数。* 除

16、除CF和和OF外,对条件标志位无定义外,对条件标志位无定义。 调试程序的使用熟练使用调试程序是学习和掌握汇编语熟练使用调试程序是学习和掌握汇编语言的关键!言的关键!三个重点三个重点了解了解DEBUGDEBUG中几个主要命令的熟练使用中几个主要命令的熟练使用用用DEBUG写一个汇编程序写一个汇编程序DEBUG的定义 DEBUG是专门为汇编语言设计的调试工具 可以检查、修改存储单元和寄存器的内容 可以装入、存储及运行目标程序 也可用DEBUG汇编简单的汇编语言程序 但一般人们更多的是用它作为调试工具DEBUGDEBUG是汇编语言程序员分析、跟踪、修改指是汇编语言程序员分析、跟踪、修改指令程序的有效

17、工具。令程序的有效工具。Debug 基本命令 a (Assemble) 逐行汇编 a address c (Compare) 比较两内存块 c range address d (Dump) 内存16进制显示 d address或d range e (Enter) 修改内存字节 e address list f (fill) 预置一段内存 f range list g (Go) 执行程序 g =address address. Debug 基本命令 h (Hexadecimal)计算两个十六进制数的和与差h value value i (Input) 从指定端口地址输入i pataddress

18、l (Load) 读盘 l address driver seetor m (Move) 内存块传送 m range address n (Name) 置文件名 n filespec filespec. o (Output) 从指定端口地址输出o portadress byte q (Quit) 结束 q r (Register) 显示和修改寄存器 r register name s (Search) 查找字节串 s range list t (Trace) 跟踪执行 t =address value u (Unassemble) 反汇编 u address 或range w (Write)

19、存盘 w addressdriver sector secnum ? 联机帮助 ?DEBUG常用命令-D命令 显示存储单元的命令(Dump)格式为:D address D address 或或 Drange Drange 例1: D 100功能:查看偏移地址为100H处存储单元的内容 例2: D 100 200功能:查看偏移地址为100H200H处存储单元的内容我们知道:物理地址是由我们知道:物理地址是由段地址段地址: :偏移地址偏移地址来决定的。来决定的。这里没写段地址默认为这里没写段地址默认为DSDS。若要查看别的段需用段超越。若要查看别的段需用段超越前缀前缀, ,如:如:D ES:100

20、D ES:100DEBUG常用命令-E命令输入或修改存储单元命令(edit)用给定的内容列表来替代指定范围的存储单元内容,格式:E 地址地址 内容列表内容列表例1:-E DS:100 F3XYZ8D;用五个字节替代存储单元DS:0100到0104的原内容 逐个单元相继修改的方法,格式:E 地址例2:-E CS:100;回车后可键入新的内容DEBUG常用命令-R命令 检查修改寄存器的命令-R(register) 显示CPU内所有寄存器内容及标志位状态 格式: R 显示和修改某个寄存器内容 格式:R 寄存器名 例:R CX 显示和修改标志位状态 格式:R FDEBUG常用命令-A命令 汇编命令A(

21、assemble) 格式:A address 在指定地址处开始编写汇编程序 该命令允许键入汇编语言语句,并能把它们汇编成机器代码,相继地存放在从指定地址开始的存储区中。 必须注意:DEBUG把键入的数字均看成十六进制数,所以如要键入十进制数,则其后应加以说明,如100D。 A A命令举例命令举例: :- -A A 127C:0100 127C:0100 mov dx,010Bmov dx,010B 127C:0103 127C:0103 mov ah,09 mov ah,09 127C:0105 127C:0105 int 21 int 21 127C:0107 127C:0107 mov a

22、h,4cmov ah,4c 127C:0109 127C:0109 int 21int 21 127C:010B 127C:010B db THIS IS AN db THIS IS AN EXAMPLE,$ EXAMPLE,$ 127C:011E 127C:011E - -r cx r cx CX 0000 CX 0000 : :011E 011E - -n n - -w w Writing 0011E bytes Writing 0011E bytes - -q q DEBUG常用命令-G命令 运行命令G(go) 格式:G=地址1地址2地址3 其中,地址1指定了运行的起始地址 如不指定则从

23、当前的CS:IP开始运行。 后面的地址均为断点地址 当指令执行到断点时,就停止执行并显示当前所有寄存器及标志位的内容,和下一条将要执行的指令。 DEBUG常用命令-T命令 跟踪命令T(Trace) 逐条指令跟踪 格式:T=地址 从指定地址起执行一条指令后停下来,显示所有寄存器内容及标志位的值。 如未指定则从当前的CS:IP开始执行。 多条指令跟踪 格式:T=地址条数 从指定地址起执行n条指令后停下来,n由条数指定。 DEBUG常用命令-U命令 反汇编命令U(Unassemble) 从指定地址开始,反汇编32个字节 格式为: U 地址 例如: U 100 如果地址被省略则从上一个U命令的最后一条

24、指令的下一个单元开始显示32个字节。 对指定范围内的存储单元进行反汇编 格式为: U range 例如: U 100 10C 从偏移地址为100H处开始反汇编10CH个字节DEBUG常用命令-Q命令 退出DEBUG程序的命令Q(quit) 退出DEBUG,返回到DOS 该命令无存盘功能,如需存盘应先使用W命令 常用的DOS功能调用 汇编语言教材-专门讲述中断程序设计 这里我们需要用到几个常用的DOS功能调用,所以这里先简单介绍几个 使用方法:使用方法: 1.1.设置入口参数设置入口参数( (有些不需要设置的就不设置有些不需要设置的就不设置) ) 2. 2.功能调用号送功能调用号送AHAH寄存器

25、寄存器 3.3.发软中断指令发软中断指令“INT 21H”INT 21H” 4C号功能调用 功能:退回到DOS(操作系统)状态 入口参数:无 出口参数:无 该号功能调用等价于INT 20H中断 4C4C号功能调用举例号功能调用举例 - -A A mov ah,4cmov ah,4c;退出;退出DEBUGDEBUG,回到,回到DOSDOS int 21 int 21 - -G G;执行程序命令;执行程序命令该程序什么也不做,直接退回到该程序什么也不做,直接退回到DOSDOS状态。状态。1号功能调用 功能:从键盘上读入一个字符,并将该字符回显在屏幕上 入口参数:无 出口参数:AL=读到字符的ASC

26、II码 说 明 : 如 果 读 到 的 字 符 是 c t r l + c 或ctrl+break,则结束程序 1 1号功能调用举例号功能调用举例 -A -A mov ah,01 mov ah,01;调用;调用1 1号功能,接受并回显字符号功能,接受并回显字符 int 21 int 21 mov ah,4c mov ah,4c;退出;退出DEBUGDEBUG,回到,回到DOSDOS int 21 int 21 -G -G;连续执行程序命令;连续执行程序命令或者使用单步调试命令,来查看,用户输入的字符或者使用单步调试命令,来查看,用户输入的字符是否存入是否存入ALAL寄存器中?寄存器中? -T-

27、T;单步调试程序;单步调试程序 -G=100 104-G=100 104;只执行一部分指令;只执行一部分指令 2号功能调用 功能:向屏幕写一字符。 入口参数:DL=输出字符的ASCII码 出口参数:无 说明:在显示输出时检查是否按ctrl+c或ctrl+break键,如果是则结束程序 2 2号功能调用举例号功能调用举例 -A -A mov DL,31 mov DL,31;31=31=字符字符11的的ASCIIASCII码值码值 mov ah,02mov ah,02;调用;调用2 2号功能,显示号功能,显示DLDL中的字符中的字符 int 21int 21 mov ah,4c mov ah,4c

28、;退出;退出DEBUGDEBUG,回到,回到DOSDOS int 21 int 21 -G -G;执行程序命令;执行程序命令9号功能调用 功能:在屏幕上显示一个字符串。 入口参数:DS:DX=需要输出字符串的首地址,字符串以字符$为结束标志。 出口参数:无 说明:在显示输出时检查是否按ctrl+c或ctrl+break键,如果是则结束程序 9 9号功能调用举例号功能调用举例 -A-A mov dx,10B mov dx,10B;dx=dx=字符串的首地址字符串的首地址 mov ah,09 mov ah,09 ;调用;调用9 9号显示字符串的功能号号显示字符串的功能号 int 21h int 21h mov ah,4c mov ah,4c ;退出;退出DEBUGDEBUG,回到,回到DOSDOS int 21 int 2110B:10B:db hello,$ db hello,$ ;注意需要以;注意需要以$为结为结束符束符 -G -G ;连续执行程序命令;连续执行程序命令例题 要求: 用debug编写程序,输出指定的两行字符串 串1: THIS IS AN EXAMPLE,$ 串2: 123456789ABCDEF,$ 注意换行的操作。例题原代码例题原代码 -A -A MOV DX,011C MOV DX,011C ;dx=dx=串串1 1的首地址的首地址 MOV AH,09 M

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论