一、8086寻址机制.ppt

上传人:吴起龙 文档编号:1474675 上传时间:2018-12-19 格式:PPT 页数:56 大小:339KB
返回 下载 相关 举报
一、8086寻址机制.ppt_第1页
第1页 / 共56页
一、8086寻址机制.ppt_第2页
第2页 / 共56页
一、8086寻址机制.ppt_第3页
第3页 / 共56页
亲,该文档总共56页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《一、8086寻址机制.ppt》由会员分享,可在线阅读,更多相关《一、8086寻址机制.ppt(56页珍藏版)》请在三一文库上搜索。

1、3.1 汇编语言程序格式,1、一个简单程序的实例(教材 P51),;- - - - - - - - - - - - - - - - - - - - - - - - - - - STSEG SEGMENT DB 64 DUP(?) STGSEG ENDS ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - DTSEG SEGMENT DATA1 DB 36H DATA2 DB 4BH SUM DB ? DTSEG ENDS ;- - - - - - - - - - - - - - - - - - - - - - - - - - - -

2、,;汇编语言源程序的格式 PAGE 60,132 TITLE PROG0-ADDs the data together,and store the result,CDSEG SEGMENT MAIN PROC FAR ;this is the program entry point ASSUME CS:CDSEG,DS:DTSEG,SS:STSEG START: MOV AX,DTSEG ;load the data segment address MOV DS,AX ;assign value to DS MOV AL,DATA1 ;get the first operand MOV BL,

3、DATA2 ;get the second operand ADD AL,BL ;add the operands MOV SUM,AL ;store result in location SUM MOV AH,4CH ;set up to INT 21H ;return to DOS MAIN ENDP CDSEG ENDS END START ;this is the program exit point,汇编语言程序(源程序)由一系列语句(程序行)组成。,汇编语句组成 四个域: 标号: 助记符 操作数 ;注释 如: DATA1 DB 36H ;变量-数据的符号地址 START: MOV

4、AX, DTSEG ;标号- 指令的符号地址 标号域通过标号名或变量名与紧随其后的代码行地址对应。 汇编语言指令行的标号必须用冒号(:)结束,如START: 伪指令行的标号不需要冒号作结束符,如DATA1 汇编语言指令及其操作数经汇编(MASM)和连接(LINK)后生成机器代码。 注释以“;”开始,它通常是对指令行或程序段功能的说明。汇编程序对注释不进行处理。,伪指令(伪操作) 伪指令是汇编程序对源程序进行汇编时处理的操作命令。 伪指令不能生成机器代码,它只为汇编程序提供转换源程序的命令 3) 汇编语言指令 操作符(助记符)-对CPU发出的操作命令; 操作数(一个或两个)-指出要处理的数据;,

5、例: MOV AH,BL MOV AX,1234H,4) 汇编语言程序的逻辑段 堆栈段 数据段 代码段 附加段 堆栈段-为程序堆栈定义一块存储区,大小由用 户定义,最大64KB。 后进先出方式,堆栈指针SP总指向栈顶, 数据进出栈自动修改SP。 数据段-程序的数据存储区,定义程序要用的数据, 程序指令通过变量来引用数据; 变量-数据存储单元的符号地址;,附加段-附加的数据存储区; 串操作时,存字符串的目的地址必须在 附加段,故程序中必须定义附加段。 代码段-程序代码存储区; 代码段中指令的地址由CS(段地址)和 IP(偏移地址)确定; IP总是保存着下一条将要执行的指令的 偏移地址。,1)段定

6、义 段名 SEGMENT 选项 - 段开头 段名 ENDS - 段结尾 SEGMENT和ENDS是段定义伪操作指令,必须成对; SEGMENT和ENDS前的段名必须一致。,2、程序结构伪操作,堆栈段定义 例: STSEG SEGMENT STACK ;段定义开始 DB 64 DUP(?);段定义体(内容) STSEG ENDS ;段定义结束 给名为STSEG的堆栈段定义了64个字节的存储空间。,数据段定义 例 DTSEG SEGMENT DATA1 DB 36H DATA2 DB 4BH SUM DB ? DTSEG ENDS,定义了3个数据项:DATA1、DATA2;其中DATA1、DATA

7、2分别定义了初始值36H、4BH,SUM没有初始值,只分配了一个字节的存储单元。 每个数据项都是字节变量;,数据段中定义的数据由代码段中的指令通过变量名来访问。 如代码段中: MOV AL ,DATA1 CPU执行时通过变量名DATA1取得数据36H送AL寄存器。,代码段定义 CDSEG SEGMENT ;代码段定义开始,段名CDSEG MAIN PROC FAR ;过程定义开始,过程名MAIN ASSUME CS:CDSEG,DS:DTSEG,SS:STSEG ;段寄存器分配 START: MOV AX,DTSEG MOV DS,AX MOV AL,DATA1 MOV BL,DATA2 AD

8、D AL,BL MOV SUM,AL MOV AH,4CH INT 21H MAIN ENDP ;过程MAIN定义结束 CDSEG ENDS ;代码段定义结束 END START,定义一个过程,代码段,过程定义: 过程-具有独立功能的(子)程序; 一个代码段可以只有一个过程;为使程序结构更清晰,一个代码段通常由几个过程组成; 格式:过程名 PROC 属性 (开头) 过程名 ENDP (结尾) PROC/ENDP-过程定义伪操作。 属性-有两个:FAR/NEAR,默认为NEAR;表明当用CALL指令对该过程调用时,是NEAR(段内)还是FAR(段间)调用,从该过程返回时是近(段内)还是远(段间)

9、返回。 主过程为FAR,子过程若与调用它的主(子)过程在同一代码段中,可定义为NEAR;否则为FAR。,(P54) 程序清单3.2代码段由1个主过程(MAIN)和3个子过程(SUBR1、SUBR2、SUBR3)组成。 ASSUME伪操作 格式:,功能:把程序中定义的各个段分配给段寄存器,使程序中使用的段名与段寄存器建立起对应关系。 ASSUME伪操作在程序中是必须的。,程序结束伪操作 格式:END label 功能:表示源程序的结束。 其中标号label指示程序开始执行的 起始地址。 如果一个源程序由多个模块组成,则主模块(即主程序或主过程所在的模块)中的END伪指令必须带有label选项,其

10、它模块中的END伪指令不带label选项。,2. 程序运行步骤及生成的文件,myfile.asm,myfile.crf,otherfiles.obj,myfile.lst,myfile.obj,myfile.map,myfile.exe,源(程序)文件,目标(程序)文件,可执行(程序)文件,列表文件,交叉引用文件,映象文件,建立, 运行汇编语言程序,CEDIT MYFILE.ASM 编辑源程序文件,文件名MYFILE,扩展名.ASM CMASM MYFILE.ASM 对源文件MYFILE.ASM进行汇编 Microsoft (R) Macro Assembler Version 5.10 Co

11、pyright (C) Microsoft Corp 1981,1988.All rights reserved. Object filename MYFILE.OBJ: Source listing NUL.LST: MYFILE.LST Cross-reference NUL.CRF: 47962 + 413345Bytes symbol space free 0 Warning Errors 0 Severe Errors CLINK MYFILE.OBJ 对目标文件MYFILE.OBJ进行连接 Microsoft (R) Overlay Linker Version 3.64 Copy

12、right (C) Microsoft Corp 1983-1988. All rights reserved. Run File MYFILE.EXE: List File NUL.MAP: Libraries .LIB: LINK : warning L4021: no stack segment CMYFILE 运行可执行文件MYFILE.EXE,.asm文件-源(程序)文件,能过编辑产生。 .obj文件-执行汇编程序(MASM),将.asm源文件中的汇编语言指令转换成机器语言-目标文件。 .lst文件-列表文件,汇编(MASM)时产生的可选文件。.lst文件列出了全部机器语言代码、偏移

13、地址以及由MASM检查出来的错误。 .crf文件-交叉引用文件,也是汇编(MASM)时产生的可选文件。.crf文件提供一个交叉引用表,列出了程序中使用的所有符号及其被定义的行号和被引用的行号。,3. 常用伪操作 (1) 程序结构伪操作 段定义伪操作 段名 SEGMENT 段名 ENDS 过程定义伪操作 过程名 PROC NEAR/FAR 过程名 ENDP 程序开始伪操作 TITLE 程序名 - 程序说明(60个ASCII字符) 程序结束伪操作 END 标号(如START) 段分配伪操作 ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA,(2) 数据类型及数据定义伪

14、操作 ORG 指定数据段数据的存储地址(起始地址的偏移量)或代码段的起始地址(偏移地址) 格式:ORG 数值 例: ORG 100H DATA1 DB 100 例:ORG 200H START:MOV AX,BX ,DB 定义字节, 是唯一能定义字符串的伪操作.,; List File for DB Examples 0000 19 DATA1 DB 25 ; decimal number 0001 89 DATA2 DB 10001001B ; binary number 0002 12 DATA3 DB 12H ; hexadecimal number 0010 ORG 0010H ; t

15、he offset address is 10h 0010 32 35 39 31 DATA4 DB 2591 ; ASCII number 0018 ORG 0018H ; the offset address is 18h 0018 00 DATA5 DB ? ; set aside a byte 0020 ORG 0020H ; the offset address is 20h 0020 4D 79 20 6E 61 DATA6 DB My name is Joe ; ASCII characters 6D 65 20 69 73 20 4A 6F 65 002E 0A 10 02 3

16、1 30 42 DATA7 DB 10,10H,10B,10B ; different data types,DW 定义字 2字节,低8位存低地址字节,高8位存高地址字节。,; List File for DW Examples 0070 ORG 70H 0070 03BA DATA DW 954 ; decimal 0072 0954 DATA9 DW 100101010100B ; binary 0074 253F DATA10 DW 253FH ; hexadecimal 0076 FFFB DATA11 DW -5 ; negative 0080 ORG 80H 0080 0009 F

17、FFF DATA12 DW 9,-1,7,0CH,00100000B,100,HI 0007 000C 0020 0064 4849 008E 0070 R 0076 R DW DATA, DATA11,; List File for DD Examples 00A0 ORG 00A0H 00A0 FF030000 DATA13 DD 1023 ; decimal 00A4 5C960800 DATA14 DD 10001001011001011100B ; binary 00A8 F2572A5C DATA15 DD 5C2A57F2H ; hexadecimal 00AC 23000000

18、 DATA16 DD 23H,34789H,65533 ; scellaneous 89470300 FFFD0000,DD 定义双字 对其后的每个数据分配4个字节(2个字); 自动将数据转换成十六进制; 低地址存放低字节,高地址存放高字节;,DQ 定义4字 每个数据占8字节 DT 为压缩的BCD数据分配存储单元 分配10字节,但最多只能输入18个数字,数据后不加“H”,; List File for DQ ,DT Examples 00C0 ORG 00C0H 00C0 C223450000000000 DATA17 DQ 4523C2H ; hexadecimal 00C8 4948000

19、000000000 DATA18 DQ HI ; ASCII characters 00D0 ? DATA19 DQ ? ; nothing 00E0 ORG 00E0H 00E0 2998564379860000 DATA20 DT 867943569829 ; BCD 0000 00EA ? DATA21 DT ? ; nothing ?,DUP 按照给定的次数来复制某个(某些)操作数,; List File for DUP Examples 0100 ORG 0100H 0100 0020 DATA22 DB 32 DUP(?) ; set aside 32 bytes ? 0120 O

20、RG 0120H 0120 0005 DATA23 DB 5 DUP(2 DUP(99) ; fill 10 bytes with 99 0002 63 012A 0008 DATA24 DW 8 DUP(?) ; set aside 8 words ? ,EQU 赋值伪操作 给一个数据标号赋予一常数值,可在数据段之外(包括代码段)使用; EQU赋值的标号名不允许重复定义。 =伪操作允许对其前面的标号重复定义。,COUNT EQU 25 COUNTER1 DB COUNT COUNTER2 DB COUNT TEMP=25 TEMP=TEMP+1,指令系统:提供给用户编写程序的一组指令集,指令

21、:,一地址指令: INC AX DEC CX 二地址指令: MOV AX, 2000H ADD AH, BL,寻址方式:表示操作数地址的方式,3.2 寻址方式与机器语言转换,一、8086寻址机制,8086CPU: 地址线:20位,寻址220=1MB 数据线:16位 寄存器:16位,如何形成20位地址-分段,8086存储器分段,段内存储单元的地址连续 最大216=64KB 段起始单元的地址-段基址能被16整除,段地址 (段基值),段个数、段用途由编程决定 段定义,段分配,物理地址的形成,左移4位,操作数类型(操作数在什么地方),二、8086寻址方式,1、立即寻址-操作数为立即数,与数据有关的寻址

22、方式 ( 7种 ) ( 以 MOV 指令为例 ),MOV AL, 5 MOV CX, 03064H ;以AF开头的立即数,前面加0 MOV BX, “AB” ;立即数为字符串 * 立即数只能用于SRC字段 MOV 5, AL SRC 和 DST的字长一致 MOV AH, 3064H 立即数不能直接赋给段寄存器或标志寄存器,要通过 通用寄存器过渡。,2、寄存器寻址-操作数在寄存器中,MOV AX, BX MOV AL, BH MOV DS, AX 8位(字节)寄存器: AH , AL, BH , BL , CH , CL ,DH ,DL; 16位(字)寄存器:AX, BX, CX, DX, SP

23、, BP, SI, DI; * SRC 和 DST的字长必须一致 MOV AH, BX CS不能用MOV指令改变内容 MOV CS, AX,操作数地址即为寄存器名,找出操作数所在的存储单元的地址 段地址 : 偏移量,3、存储器寻址-操作数在存储器中,EA由3个分量组合而成,段寄存器 提供,有效地址 EA,位移量-8/16位二进制数;常以符号地址形式(变量或标号)出现在指令中,数据默认在数据段(DS); 可用段前缀指定(改变),直接寻址方式 有效地址EA由指令直接给出 有效地址EA-操作数的偏移地址; 物理地址PA = 16d (DS) + EA 例:MOV AX, 2000H 比较 MOV A

24、X, 3064H EA=2000H 假设(DS)=3000H, 那么(PA)=32000H,例:操作数地址可由变量(符号地址)表示 MOV AH, VALUE ( VALUE DB 10 ) 或 MOV AH,VALUE,注意: *直接寻址方式隐含的段为数据段 DS * 可使用段跨越前缀改变数据所在段地址。 MOV AX, ES :2000H * 使用变量时,要注意变量的属性 VALUE DB 10 MOV AX, VALUE MOV AL, VALUE MOV AX, WORD PTR VALUE * 适于处理单个变量,寄存器间接寻址方式 操作数地址在寄存器中 EA在基址寄存器(BX/BP)

25、或变址寄存器(SI/DI)中 BX, SI, DI 操作数在数据段 (DS) BP 操作数在堆栈段 (SS) 物理地址 = 16d (SS) + (BP) 例 MOV AX, BX PA = 16d (DS) + (BX) MOV DX, BP PA = 16d (SS) + (BP) MOV CH, SI PA = 16d (DS) + (SI) MOV DI, BX PA = 16d (DS) + (DI),可以段跨越改变数据所在的段: MOV ES:BX , AX PA = 16d (ES) + (BX) 不允许使用AX、CX、DX存放EA MOV AX, CX,寄存器相对寻址寻址方式,

26、隐含段地址:SI、DI、BX为DS;BP为SS。可用段跨越。 例: MOV AX, COUNTSI 或 MOV AX, COUNT+SI 假设(DS)=3000H, (SI)=2000H, COUNT=3000H 那么 PA = 35000H * 一个地址分量在程序执行过程中可进行修改,适于数组、字符串、表格的处理,EA是两个地址分量-基址寄存器或变址寄存器的内容与指令中给出的位移量(8/16位) 之和,相对基址变址寻址方式,EA是三个地址分量-基址寄存器和变址寄存器 的内容与指令中给出的位移量(8/16位) 之和,指令格式: MOV AX, MASKBXSI 或 MOV AX, MASKBX

27、+SI 或 MOV AX, MASK+BX+SI 例:MOV AL,FILEBX+DI+2 PA=(DS)16+(BX)+(DI)+2+FILE,若位移量为0-基址变址寻址方式 :,MOV AX, BXDI PA=(DS)24+(BX)+(DI) 或 MOV AX, BX+DI MOV AX, BP+DI PA=(SS)24+(BX)+(DI) MOV AX, ES:BXSI PA=(ES)24+(BX)+(SI),因为有两个地址分量可在程序执行过程中进行修 改,适用于访问二维数组.,注意: 必须是一个基址寄存器和一个变址寄存器的组合, 不可同为基址寄存器(BX、BP)或同为变址寄存 器(SI

28、、DI) MOV AX, BXSI MOV AX, BXBP MOV BXDI, AX MOV AX, SIDI MOV AX, MASKBXSI MOV AX, MASKBXBP,4、串操作寻址,8086/8088提供专门的串操作指令 串操作指令所用的操作数均在存储器中 串操作指令隐含使用变址寄存器: SI(源操作数地址指针) DI(目的操作数地址指针),指针修改方向(加或减)由标志寄存器的DF位(方向标志) 决定:,字节串操作- 字串操作-,5、I/O端口寻址,输入输出指令是对端口进行操作-端口寻址,直接端口寻址-8位的端口地址由指令直接给出 端口号为:0255,共256个 IN AL,0

29、6H OUT F8H,AL,间接端口寻址-若端口地址大于FFH(255),则由DX 寄存器存放端口地址 MOV DX,280 IN AX,DX OUT DX,AL,与转移地址有关的寻址方式,用来确定 转移指令 及 CALL指令 的转向地址。,以 转移(条件转移/无条件转移)指令 为例,段内:转移指令与转向的目标指令在同一代码段中,(CS)不变。 段间:转移指令与转向的目标指令在两个代码段中, (CS)变化。,表示转移距离(称为位移量)的操作符: SHORT 短转移,位移量用1个字节表示, 在-128 127字节之间。 JMP SHORT NEXT NEAR 近转移,在同一段内转移,位移量用1个

30、字表示 在-3276832767字节范围内。 JMP NEAR PTR AGAIN FAR 远转移,表示转移距离超过32K字节, 或是在不同段之间转移。 JMP FAR PTR WAIT PRT-指针操作符,1. 段内直接寻址 转向的有效地址EA = 转向地址 = 16d (CS) + (IP)新,(IP)当前 + 位移量( 8bit / 16bit ),(IP)新,例: 段内直接寻址方式的示例 1060:000D EB04 JMP SHORT NEXT IP当前值 1060:000F 1060:0011 1060:0013 0207 NEXT: ADD AL,BX,EA 000F+04=00

31、13 CS 不变,2. 段内间接寻址 转向的有效地址EA是一个寄存器或存储单元的内容。 (可用除立即数以外的任何一种数据寻址方式得到) 物理地址 = 16d (CS) + EA 例: (BX)=1256H (SI)=528EH TABLE=20A2H (DS)=2000H (232F8H)=3280H (264E4H)=2450H JMP BX ; (IP)1256H JMP TABLEBX ; JMP WORD PTR TABLEBX ; (BX)+20A2H=32F8H (DS) 16+32F8H=232F8H , (IP)(232F8H)=3280H JMP BXSI JMP WORD

32、PTR BXSI ;(BX)+(SI)=64E4H (DS) 16+64E4H=264E4H , (IP)(264E4H)=2450H,TABLE DW ONE DW TWO DW THREE MOV BX,4 JMP TABLEBX ONE: TWO: THREE: ,ONE,TWO,THREE,+1,+4,+3,+2,IP,3. 段间直接寻址 用指令中提供的转向段地址和偏移地址取代CS和IP 物理地址 = 16d (CS) + (IP) 例:,code1 segment EA 0250 2000 jmp far ptr next code1 ends,code2 segment next: . code2 ends,4. 段间间接寻址 用存储器中的两个相继字的内容取代CS和IP。 (存储单元的地址可用除立即数和寄存器以外的任何一种 数据寻址方式得到) 物理地址 = 16 (DS) + EA 例: JMP DWORD PTR INTERS+BX,存储器,IP CS,EA=(BX)+INTERS,三、8086指令系统,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1