2020版,2020版微机原理与系统设计

代码 8
第3章汇编语言基础 董明皓,博士西安电子科技大学dminghao@ 基础知识导入
1 •编写程序时,M空间中有四个逻辑段:代码段、数据段、附加(数据)段、堆栈段 •这些段,按照其属性,本质上可以分为两类:代码和数据 微机原理与系统设计 8086CPU的指令系统 董明皓 dminghao@ 基础知识导入
2 数据传送指令:格式:MOVDST,SRC;(DST)←(SRC)•说明:将SRC(源操作数)中的一个字节或一个 字传送到DST(目的操作数)所指定的位置•只传输数据,而不进行数据计算 微机原理与系统设计 8086CPU的指令系统 董明皓 dminghao@
3 目录
1 汇编语言基本概念 2数据与转移地址的寻址方式
3 汇编语言程序结构 4源程序的汇编、链接与调试
5 总结 微机原理与系统设计 8086CPU的指令系统 董明皓 dminghao@
4 汇编语言基本概念 什么是语言?沟通与交流,让别人领会你的意图,知道该为你 做什么事的工具 机器语言有时需要翻译 各国语言有时需要翻译 微机原理与系统设计 8086CPU的指令系统 董明皓 dminghao@ 汇编语言基本概念 •指令:控制计算机完成某种操作的命令•指令系统:CPU所能识别的所有指令的集合•指令系统兼容性:不同CPU的指令系统不一样•指令中应包含的信息:执行的操作、运算数据的来源、运算结果的去向 微机原理与系统设计 8086CPU的指令系统 董明皓 dminghao@ 汇编语言基本概念 •机器语言:指令代码语言,即:二进制码如:00 •机器语言程序:用机器语言编写的程序,即:二进制代码程序 如:0001001010110000B或B012•优点:程序送入计算机后,CPU可直接执行、不 需编译 缺点:不易书写,不易检查,编写程序十分困难 微机原理与系统设计 8086CPU的指令系统 董明皓 dminghao@ 汇编语言基本概念 •
汇编语言:采用一组字母、数字和符号来代替一条二进制代码指令,这种表示指令的符号称为助记符,这种用一组符号来代替一条指令编写程序时采用的语言(二进制码)如:MOVAL,12H •汇编语言(源)程序:采用汇编语言编写的程序,即:由助记符和操作数组成 •优点:比一串二进制代码清晰,书写容易,记忆方便。
缺点:CPU不能直接执行 微机原理与系统设计 8086CPU的指令系统 董明皓 dminghao@ 汇编语言基本概念 •汇编:汇编语言源程序翻译成机器语言(CPU可以直接执行)的过程 •反汇编:机器语言变为汇编语言源程序的过程。
•汇编程序:能把汇编语言源程序翻译成机器语言 程序的系统程序(语言加工程序)。
•8086宏汇编程序为MASM.EXE。
微机原理与系统设计 8086CPU的指令系统 董明皓 dminghao@ 微机原理与系统设计 8086CPU的指令系统 董明皓 dminghao@ 汇编语言基本概念 从汇编语言源程序到可执行程序所经过的处理过程 用全屏幕编辑软件编辑汇
编语言源程序文件名.ASM 用汇编程序MASM.EXE对源程序文件名.ASM进行汇编 有语法错误有吗?没 在磁盘上形成目标码文件文件名.OBJ *.obj:地址不连续的目标码文件 用连接程序LINK.EXE对文件名.OBJ进行连接 有错误吗?有没 在磁盘上形成了可执行文件文件名.EXE *.exe:地址连续的目标码文件 汇编语言基本概念 如: 汇编程序为MASM.EXE 机器语言程序 汇编语言程序 H省去,默认有
H B012042150B3FF20C358 汇编反汇编 MOVAL,12HADDAX,21HPUSHAXMOVBL,0FFHANDBL,ALPOPAX 在DEBUG.EXE下进行(U命令) 汇编语言基本概念 •汇编语言与机器语言属于低级语言,它们与高级语言有较大的区别,汇编语言中的语句与机器的型号密切相关。
•在高级语言中,完成某个加法功能,我们可采用语句X=A+
B,只要给变量A和B赋一确定值,此加法就可以实现了。
在汇编语言中则不同,程序必须指出
A、B存放在何处,相加后的结果又存放在何处。
•高级语言告诉机器做什么,汇编语言告诉机器怎么做! 对使用者来说,学习汇编语言,需要掌握的知识更多、更深入,但更能把握整个程序的全部进程。
汇编语言中的语句种类 在汇编语言程序设计中,程序中的语句有指令语句伪指令语句宏指令语句 微机原理与系统设计 8086CPU的指令系统 董明皓 dminghao@ 汇编语言中的语句种类 •指令语句: •汇编后可翻译成指令代码的语句 •【或】CPU可执行的语句•如:MOVAL,12H•伪指令语句: •汇编后不产生指令代码的语句 •【或】CPU不能执行的语句•如:DB,DW等在M中分配B/W型地址 微机原理与系统设计 8086CPU的指令系统 董明皓 dminghao@ 汇编语言中的语句种类 •宏指令语句:•8086指令系统中没有的指令•是用户自己根据宏指令定义伪指令开发的新的语 句•类似:Matlab/C语言中自定义函数,然后再调用。
微机原理与系统设计 8086CPU的指令系统 董明皓 dminghao@ 指令语句:MOVAL,12H伪指令语句:VAR1DB12H,0A5H,18+20,50/3,
0,-1 17 汇编语言中的语句组成 •汇编语言源程序是由一条条语句组成的•语句则由标识符、操作助记符、操作数、注释
部分组成。
•其基本指令格式如下: 名称 空格操作助记符空格操作数;注释: 标识符操作助记符 微机原理与系统设计 8086CPU的指令系统 董明皓 操作数 注释 dminghao@ 汇编语言中的语句组成 名称/标识符助记符操作数;注释 •(操作)助记符:说明计算机要执行哪种操作(如传送、运算、移位、跳转等),是指令中必须的组成部分。
微机原理与系统设计 8086CPU的指令系统 董明皓 dminghao@ 汇编语言中的语句组成 名称/标识符助记符操作数;注释 •以“;”开头,表示语句的注释•可以作为语句的一部分,也可以作为语句的一行 如:MOVAX,12H;将立即数12H传送给AXMOVAX,12H;将立即数12H传送给16位数据寄存器AX 微机原理与系统设计 8086CPU的指令系统 董明皓 dminghao@ 汇编语言中的语句组成 名称/标识符助记符操作数;注释 •指令中:通常无操作数/有一个或两个操作数伪指令中:可以有多个操作数(用逗号隔开) 例:PUSHAX; 将寄存器AX中的内容入栈 例:CLI; 将PSW中的IF清零 例:MOVAL,12H;将12H赋值给AL 例:VAR1DB12H,0A5H,18+20,50/3,
0,-1 微机原理与系统设计 8086CPU的指令系统 董明皓 dminghao@ 汇编语言中的语句组成 名称/标识符助记符操作数;注释 •指令执行所需的数据,一般通过寻址方式给出或 直接给出,即: 直接给出 :立即数(本课讲解) 寻址方式给出/给出地址:REG/M中(下课讲解) •MOVAL,12H;将源SRC传输到AL 立即数数据REG 微机原理与系统设计 8086CPU的指令系统 董明皓 dminghao@ 汇编语言中的语句组成 名称/标识符助记符操作数;注释 •立即数的构成形式•数值常数:二进制数、十进制数、十六进制数•字符串常数:用单引号括起来的一串字符•表达式:表达式由操作数和操作符组成。
微机原理与系统设计 8086CPU的指令系统 董明皓 dminghao@ 汇编语言中的语句组成 名称/标识符助记符操作数;注释 •立即数的构成形式:数值常数•数值常数:二进制数、十进制数、十六进制数 二进制数:MOVAL,00001100B十进制数:MOVAL,12十六进制数:MOVAL,12H MOVAL,0CH 十六进制数,第一个字符必须是数字,若以字母开头,前补
0 汇编语言中的语句组成 名称/标识符助记符操作数;注释 •立即数的构成形式:字符串常数•字符串常数:用单引号括起来的一串字符 MOVDL,′A′;DL41HBUFDB′12Aa′;将′12Aa′字符串定义给变量BUF以下连的(4个字 节)M单元。
微机原理与系统设计 8086CPU的指令系统 董明皓 dminghao@ 汇编语言中的语句组成 名称/标识符
助记符操作数;注释 •立即数的构成形式:表达式•表达式由:操作数和操作符组成。
操作符有:算术操作符:+、-、*、/、MOD逻辑操作符:ADD、OR、XOR、NOT关系操作符:EQ(=)、NE(≠)、LT(<)、GT(>)、 LE(≤)、GE(≥)属性操作符:SEG、OFFSET、TYPE、LENGTH、SIZE属性修改操作符:PTR 指令中的立即数 •算术操作符: MOVAL,5+2*3; 等效于MOVAL,11 MOVAL,11/2; 等效于MOVAL,05H;取商 MOVAL,11MOD2;等效于MOVAL,01H;取余 微机原理与系统设计 汇编时运算出结果 8086CPU的指令系统 董明皓 dminghao@ 指令中的立即数 •逻辑操作符: 等ANDAL,0CCHOR0F0H效于ANDAL,0FCHCPU执行时完成的操作汇编程序汇编时完成的操作 微机原理与系统设计 8086CPU的指令系统 董明皓 dminghao@ 指令中的立即数 •关系操作符: 若关系成立,则为真,取值全1(结果为-1);若关系不成立,则为假,取值全
0。
等MOVAL,04HLT05H;关系成立为真效于MOVAL,0FFH 微机原理与系统设计 8086CPU的指令系统 董明皓 dminghao@ 汇编语言中的语句组成 名称/标识符助记符操作数;注释 •在汇编语言程序设计中,为了方便记忆,做以下操作:
1.将某指令语句符号化,即给要某语句起一个标识符 标号名
2.将直接访问的存储器单元的实际地址符号化,即给要访问 M单元起一个标识符名变量名 •每条语句/M单元可以有名称,也可没有 •编程时用户自定义,无特殊的意义 •取名规则P24/P37 微机原理与系统设计 8086CPU的指令系统 董明皓 dminghao@ 汇编语言中的语句组成 名称/标识符助记符操作数;注释 •标号名:以冒号间隔,标识指定的地址(段地址、偏移地址)如:START:MOVAX,1000 •变量名:以空格间隔,表示存放数据的存储空间如:VAR1DB12H,0A5H,18+20,50/3,
0,-1 •名称大小写都可,指向同一内容 微机原理与系统设计 8086CPU的指令系统 董明皓 dminghao@ 标号及变量 •标号:针对指令语句 •用以指示某条指令语句的地址。
● • 在指令语句的操作助记符前加上标号名, ●● 以冒号结尾。
•它可以作为程序转移指令的操作数。
JMPLAB1●●●● LAB1:MOVAX,0●●● 微机原理与系统设计 8086CPU的指令系统 董明皓 dminghao@ 标号及变量 •变量:针对M单元•用以表示放数据的存储空间 假设:存储器单元内存有字节型变量如下: 20H,30H,11H,0AH, 如何将20H传输到某处? DATA20HMOVAL,DATA 如何将11H传输到某处?利用地址实现的问题? DATA+130HDATA+211HDATA+30AH MOVAL,DATA+
2 微机原理与系统设计 8086CPU的指令系统 董明皓 dminghao@ 变量定义伪指令 •变量定义伪指令:主要应用在数据段(DS) •通过变量定义伪指令定义变量,用来给变量名所对应的M单元分配数据或预留空间。
•变量定义伪指令有以下五种:[变量名]DB表达式;定义字节型变量,8位[变量名]DW表达式;定义字型变量,16位[变量名]DD表达式;定义双字型变量,32位[变量名]DQ表达式;定义长字型变量,64位[变量名]DT表达式;定义一个10字节的变量,80位 微机原理与系统设计 8086CPU的指令系统 董明皓 dminghao@ 变量定义伪指令 •具体操作:在变量名所对应的地址开始的内存依次放入表达式中的各项值例:DATADB20H,30H,11H,0AH 变量名标识符 变量中按顺序存储的数据 1001:1000H 20HDATA 助记符 决定变量数据类型的关键字: DB(字节)1DW(字)2DD(双字)4DQ(长字)8DT(十字)10 1001:1001H1001:1002H1001:1003H 30H起名字替代 11H 0AH 微机原理与系统设计 8086CPU的指令系统 董明皓 dminghao@ 变量定义伪指令 例1:DATADB20H,30H,11H,0AH,画出存储单元分配图 例2:DATA1DW20H,30H,11H,0AH,画出存储单元分配图 DATA 20H DATA+130H 11H 0AH DATA1 20H DATA1+
1 00H 30H 00H 11H 00H 0AH 00H 低地址放低字节,高地址放高字节 微机原理与系统设计 8086CPU的指令系统 董明皓 dminghao@ 变量定义伪指令 变量定义伪指令语句中的表达式有以下几种情况: •
1个常数/多个常数/表达式,其间用逗号分割。
如:DATADB20H,30H,11H,0AH •带引号的字符串如:DATA1DB‘0123’ DATA2DW‘AB’,‘C’,‘D’ •1个/多个问号(?):预留存储空间,以存放结果 如:DATA3DW?
;预留1个字的存储空间,内容未知 •重复方式,其格式为:重复次数DUP(表达式) 如:DATA4DB3DUP(?
);预留3个字节M空间,内容未知 微机原理与系统设计 8086CPU的指令系统 董明皓 dminghao@ 变量定义伪指令 注意:定义字符串(P26/P37例子,必做) 若字符串定义为
DB字节变量时 •整个字符串可以在同一个引号内给出 •每个字节内存入一个字符的ASCII码 若字符串定义为DW字变量时 •每个数据不能超过两个字符 •若为两个字符,则高位放高字节,低位放低字节 •若为一个字符,则该字符的ASCII码放在低字节,高 字节为00H 一般情况下,一个逻辑段定义时,EA为
0 微机原理与系统设计 8086CPU的指令系统 董明皓 dminghao@ 变量定义伪指令 注意:定义字符串(P26/P37例子,例)
若字符串定义为DD双字变量时•每个数据不能超过两个字符•最高位内容自动取
0 一般情况下,一个逻辑段定义时,EA为
0 微机原理与系统设计 8086CPU的指令系统 董明皓 dminghao@ 变量定义伪指令 注意:DW和DD的特殊用法
(P28/P38,例)•<变量名1>DW<变量名2/标号名>±常数•定义变量名1位字型地址指针,存放<变量名2/标号 名>的EA •<变量名1>DD<变量名2/标号名>±常数•定义变量名1位双字型地址指针,第一个字存放<变 量名2/标号名>的EA,第二个字存放SEG 微机原理与系统设计 8086CPU的指令系统 董明皓 dminghao@ 变量定义伪指令 假设AD1的SEG=0100H,EA=2157H, AD1
DB100DUP(?
) AD2DWAD1 ;指向AD1的起始地址EA AD3DWAD1+10AD4DDAD1则: ;指向AD1的起始地址SEG:EA 试画出AD1~AD4的M分配图 微机原理与系统设计 8086CPU的指令系统 董明皓 dminghao@ 变量定义伪指令 注意:$的定义与用法
在汇编程序中masm.exe中有一个位置计数器$(16位),预定义符号$,用于:指示汇编程序对源程序进行汇编时,当前汇编语句(将要存放的M单元)的偏移地址; DATADB20H,30H,汇编过程中$的变化情况DATADW20H,30H,汇编过程中$的变化情况 本身是一个常数,程序中可引用 汇编一次+1汇编一次+
2 哪条语句正确?DAT2DB$ × DAT2DW$ √ 微机原理与系统设计 8086CPU的指令系统 董明皓 dminghao@ 标识符的属性 •标号的属性: •一个标号被定义,就具有3个属性 段地址(SEG):标号对应指令所在M单元的16位段地址 段内偏移地址:标号对应指令所在M单元的16位段偏移/有效 (OFFSET) 类型(TYPE) 地址(EA) NEAR型:转移指令与转移目的地在同一代:码段(段内转移),赋值为
1 FAR型:转移指令与转移目的地在不同代码段(段间转移),赋值为
2 例:MOVBL,OFFSETNEXT是否正确?
改:属性表达式操作符:获取属性 微机原理与系统设计 8086CPU的指令系统 董明皓 dminghao@ 标识符的属性 •变量的属性:•一个变量被定义,就具有5个属性 段地址(SEG) 变量所在段的段地址 段内偏移地址(OFFSET)为变量对应单元的偏移地址 BX,BPSI,DI 类型(TYPE)长度(LENGTH) 大小(SIZE)SIZE=LENGTH×TYPE 为每个变量所占的字节数 在变量名定义语句中,所定义的变量的个数;8086汇编语言规定:第一个DUP前的系数,表示变量重复的次数,即变量个数;若无DUP,则=
1 所有变量所占用的总字节数,它等于变量的长度与类型(字节数)之积。
微机原理与系统设计 8086CPU的指令系统 董明皓 dminghao@ 属性操作符 •属性操作符(P28-表3.1/P39-表3.2):•获取标号/变量属性的操作符 例:MOVAL,TYPEDATA;把1存储AL(假设DATA为DB型变量) 例:MOVBX,OFFSETDATA;DATA变量对应存储单元的16位偏移地址 微机原理与系统设计 8086CPU的指令系统 董明皓 dminghao@ PTR操作符 •属性临时修改操作符(PTR):•用途:
1.暂时改变已经定义过的变量或者标量的类型; 使用格式:变量类型PTR表达式;变量的类型:BYTE/WORD/DWORD标号类型PTR表达式;标号类型:NEAR(进程)/FAR(远程) 例:DAT3DW02H,567AH×MOVAL,DATA3√MOVAL,BYTEPTRDATA302H(AL)=?
MOVAL,BYTEPTRDATA3 微机原理与系统设计 8086CPU的指令系统 董明皓 dminghao@ PTR操作符 •属性临时修改操作符(PTR):•用途:
2.对没有类型的M单元指定类型; •MOV[BX],20H•MOVBYTEPTR[BX],20H ×,类型不一致√ DS:(BX) 该单元是DB单元还是WORD单元,不确定!! 微机原理与系统设计 8086CPU的指令系统 董明皓 dminghao@ PTR操作符 •用Debug查看内存的结果如右图所示: •MOVAX,2000H MOVDS,AXMOVBYTEPTR[1000H],1将使内存中的内容变为什么? 2000:1000 •MOVAX,2000H MOVDS,AX MOVWORDPTR[1000H],1将使内存中的内容变为什么? FFFFFFFFFF…… 微机原理与系统设计 8086CPU的指令系统 董明皓 dminghao@ 例题 数据段中1500H中,定义了以下变量: DAT1DB12,-12,12HDAT2DB2*3,3+2DAT3DW02H,567AHDAT4DD89HDAT5DB′THIS′DAT6DW′AB′,′C′,′D′DAT7DB3DUP(00H)DAT8DW3DUP(?
)DAT9DWDAT6DAT10DDDAT8DAT11DB?
SEG1500H ●●●● OFFSET0000H0003H0005H0009H000DH0011H0017H001AH0020H0022H0026H TYPE11241212241 LENGTH11111133111 SIZE11241236241 微机原理与系统设计 8086CPU的指令系统 董明皓 dminghao@ 例题 例:在数据段定义变量DAT3,DAT3DW02H,567AH,DS=1500H,DAT3的EA=05H,则:请画出DAT3的存储器示意图及地址 执行完下列语句后,AX的值分别为什么? MOVAX,SEGDAT1;(AX)=1500HMOVAX,SEGDAT10;(AX)=1500HMOVAX,OFFSETDAT3;(AX)=0005HMOVAL,TYPEDAT3;(AL)=02HMOVAH,SIZEDAT3;(AH)=02H 微机原理与系统设计 8086CPU的指令系统 董明皓 dminghao@ 例题 例:判断下列语句的作用以及正确与否 DAT1DB20H,30H,11H,0AH MOVAL,DAT1+
2 ;对,DAT1+2单元数据给AL ;DAT1+2单元地址用变量名代替 MOVAX,DAT1 ;错,类型不一致 MOVAX,WORDPTRDAT1;强制转换 MOV[BX],10H ;错,类型不明确 MOVBYTEPTR[BX],10H;实操中,操作对象类型不明确, 则用PTR说明,用途广泛; 微机原理与系统设计 8086CPU的指令系统 董明皓 dminghao@ 综合例题 例:(DS)=1500H,在数据段0000H偏移地址开始有以下变量定 义。
DAT1
DB12,-12,12H DAT2DB2*3,3+
2 1500H:0000H DAT3DW$,567AH DAT4DD89H DAT5DB′THIS′ DAT6DW′AB′,′C′ DAT7DB3DUP(00H) DAT8DW3DUP(?
) DAT9DWDAT6 DAT10DDDAT8 DAT11DB?
微机原理与系统设计 8086CPU的指令系统 董明皓 dminghao@ 综合例题 DAT1DB12,-12,12HDAT2DB2*3,3+2DAT3DW$,567AH 微机原理与系统设计 8086CPU的指令系统 1500H:0000H0003H0005H 0CH0F4H12H06H05H05H00H7AH56H DAT1DAT2DAT3 董明皓 dminghao@ 综合例题 DAT4DD89HDAT5DB′THIS′ 1500H:0009H000DH 89H00H00H00H`T``H``I``S` DAT4DAT5 微机原理与系统设计 8086CPU的指令系统 董明皓 dminghao@ 综合例题 1500H:0011H DAT6DW′ABC′,′C′,’D’×DAT6DW′AB′,′C′,’D’√ ‘B’‘A’‘C’00H‘D’00H DAT6 微机原理与系统设计 8086CPU的指令系统 董明皓 dminghao@ 综合例题 DAT7DB3DUP(00H)DAT8DW3DUP(?
) 1500H:0017H 00H 00H 00H 001AH ?
?
?
?
?
?
DAT7DAT8 微机原理与系统设计 8086CPU的指令系统 董明皓 dminghao@ 综合例题 DAT9DWDAT6DAT10DDDAT8DAT11DB?
变量地址 1500H:0020H1500H:0022H 0026H$ 11H00H1AH00H00H15H ?
DAT9DAT10 DAT11 微机原理与系统设计 8086CPU的指令系统 董明皓 dminghao@ 课后作业-P79/P54 3.1
(1)(3)
(4)(5)(6)3.2要求:为方便批改,按照从低地址单元向高地址 单元顺序顺次写出,且单元之间用逗号隔开3.3(查书4.1/3.3节) Deadline:2020.9.2623:59:59 微机原理与系统设计 8086CPU的指令系统 董明皓 dminghao@

标签: #文件 #文件格式 #文件 #文件 #映像 #压缩文件 #cpu #cat