汇编教程课件上文档格式.docx
《汇编教程课件上文档格式.docx》由会员分享,可在线阅读,更多相关《汇编教程课件上文档格式.docx(86页珍藏版)》请在冰点文库上搜索。
![汇编教程课件上文档格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/9/3054435c-d101-4cdd-a119-c88cf62c351e/3054435c-d101-4cdd-a119-c88cf62c351e1.gif)
102+2×
101+3×
100+6×
10-1
各位权值10k
二进制数:
101101(B)=1×
25+1×
23+1×
22+1×
20=45(D)
各位权值2k
十六进制数:
5F(H)=5×
161+15×
160(D)
各位权值16k
1.2.2二进制数、十进制数和十六进制数转换
(1)二进制数转换为十进制数(按权展开)
1101.1(B)=23+22+20+2-1=8+4+1+0.5=13.5(D)
(2)十进制数转换为二进制数
.降幂法:
(适用于数值不大的数)
13.5(d)=8+4+1+0.5=1101.1
1000
0100
0001
+0.1
1101.1
★对于小数有:
例1.2:
N=0.8125D(降幂法)
2-12-22-32-4
0.50.250.1250.0625
计算过程:
0.8125-0.5=0.3125(b1=1)
0.3125-0.25=0.0625(b2=1)
0.0625-0.125<
0(b3=0)
0.0625-0.0625=0(b4=1)
N=0.8125D=0.1101B
例1.4:
N=0.8125D(乘2取整法)
0.8125×
21.625
0.625×
21.25
0.25×
20.5
0.5×
21.0
1.8125D=0.1101B
★对于整数有:
除法:
(除2取余法,对整数而言)
N=13除2即二进制数去掉最右一位
13/2=6余1(余1表明N是奇数,得到一位)
6/2=3余0商为6即可写出110
3/2=1余1
1/2=0余1
13(d)=1101(b)
1011B=11D
1101B=13D
1.1.3十六进制数与二进制数和十进制数转换
(1)十六进制数与二进制数转换
每四位二进制数表示一位十六进制数
例:
001101011011111135BF
即0011010110111111(B)=35BF(H)
(2)十六进制数与十进制数转换
方法同二进制数与十进制数转换,不过是基数为十六进制数所对应的权。
35BF(H)=0011010110111111(B)
(3)常见几种进制数码表
二进制
八进制
十进制
十六进制
0000
1
0010
2
0011
3
0100
4
0101
5
0110
6
0111
7
1000
10
8
1001
11
9
1010
12
A
1011
13
B
1100
14
C
1101
15
D
1110
16
E
1111
17
F
1.2.2二进制数和十六进制数运算
1.2.2.1二进制运算
加法规则:
0+0=01+0=10+1=11+1=0(进位1)
乘法规则:
0×
0=01×
0=00×
1=01×
1=1
1.2.2十六进制数运算
原则:
逢十六进一
43A55A342A34
+5A34-34A5×
0025
9DD9258FD304
+5468
61984
1.3计算机中数和字符的表示
1.3.1数的补码表示
定义:
(X>
=0时)[X]补=符号+|X|------
(1)
(X<
0时)[X]补=2n-|X|=(2n-1-|X|)+1---
(2)
|X|=2n-[X]补=(2n-1-[X]补)+1(X<
0)---(3)
(2)+(3)即X<
0时:
[X]补+|X|=2^n
数的补码具体操作是:
反码+1,符号扩展
1.3.2补码的加减法(见教材P6-7)
由上面式
(2),(3)得到式(4):
[X]补求补[-X]补求补[X]补---(4)
[X+Y]补=[X]补+[Y]补--(5)
[X-Y]补=[X]补+[-Y]补--(6)
(6)式的Y<
0时即为(5)式,仅需考察(6)式且可认为X>
0,Y>
0:
1)如果[X-Y]>
=0,由定义应有[X-Y]补=X-Y,
则(6)式右边=X+(2^n-Y)=X-Y+2^n=X-Y(2^n为多余)
2)如果[X-Y]<
0,(或者说Y>
X),
应有[X-Y]补=2^n-|X-Y|=2^n-(Y-X)=2^n-Y+X=[-Y]补+[X]补
(computer)
1.3.3无符号数
1.3.4字符表示
见教材P:
8表1.1“ASCII码”
*2A+2B-2D
/2FLF0ACROD
1.4几种基本逻辑运算
AND,OR,NOT,XOR
AND
OR
NOTA
XOR
1.3计算机组织
2.1计算机系统概述
硬件:
存储器
大容量
接口
总线控制
逻辑
中央处理机CPU
……
I/O设备
计算机结构
.中央处理机CPU
.存储器memory
RAM(RandomAcceseMemory),ROM(ReadOnly),
EPROM(写几百~几千次),闪存(一种高速EPROM,可写几千次)
.输入输出子系统I/O
系统总线:
数据线,地址线,控制线
CPU的发展:
8088(准16位机)
8086:
16位机,16位通用寄存器,20位地址线,1M寻址.
80286(准32位机)
80386:
32位机,32位通用寄存器,32位地址线,4G寻址(理论).
80486
80586:
1993,字长32位,主频60-166M,数据总线64,地址总线32,寻址4G
80686(PRO)
PⅡ:
1997,字长32位,主频-333M,数据总线64,地址总线32,寻址4G
PⅢ:
1999,字长32位,主频-600M,数据总线64,地址总线36,寻址64G
PⅣ:
软件:
系统软件
应用软件
操作系统
系常驻监督程序
统
软
件文I/O调文翻连装系
件驱试本译接入统
管动程编程程程程
理程序辑序序序序
程序程库
序序
用
户
软用户程序用户程序库
件
****************************************************************************************************
2.2中央处理机CPU
2.2.1CPU的组成
算术逻辑部件、控制逻辑、工作寄存器
2.2.280X86寄存器组
寄存器分为可见和不可见311615870
///////////////////////
AH
AL
BH
BL
CH
CL
DH
DL
SP
BP
DI
SI
1、.通用数据寄存器EAX
AX=AHAL累加器EBX
BX=BHBL基址变址ECX
CX=CHCL计数EDX
DX=DHDL数据
.指针及变址寄存器
SP堆栈指针
BP基址指针
DI目的变址(自动增1/减1)
SI源变址(自动增1/减1)
2、专用寄存器
IP
FLAGS
IP指令指针
FLAGS标志
标志寄存器FLAGS
1514131211109876543210
NT
IO
PL
OF
DF
IF
TF
SF
ZF
AF
PF
CF
.程序状态字寄存器
PSW
表2.1PSW标志位的符号表示
标志名
flag=1
flag=0
OF溢出(是/否)
OV
NV
第四章DF方向(增/减)
DN
UP
第四章IF中断(允许/关闭)
EI
第四章SF符号(负/正)
NG
ZF零(是/否)
ZR
NZ
AF辅助进位(是/否)
AC
NA
PF奇偶(偶/奇)
PE
PO
CF进位(是/否)
CY
NC
3、段寄存器
CS
DS
ES
SS
////////FS///////
////////GS////////
CS代码
DS数据
ES附加
SS堆栈
.?
段寄存器是16位寄存器,用什么
办法提供20位地址.
220=1KK=1M(兆)
段寄存器主要用于存储器寻址,用来直接或间接地存放段地址。
是解决1M地址的寻址问题。
*8088/8086只能工作在实模式(实模式寻址1M)
150存储器
段地址
所选存储单元
段地址
偏移地址
偏移地址
+
*除段寄存器外,286以上,还可见32位,前加E,如EAX,ESP,EDI。
☆
2.3存储器
。
存储器分内存和外存,这里指内存,外存指硬盘等。
存储器按作用分:
RAM,ROM(C000~FFFF),Cache(缓冲CPU与
低速的RAM)
2.3.1存储单元的地址和内容
位、字节、字
BIT:
0/1
BYTE:
8BIT
WORD:
2BYTE
单字、双字、四字
70
(1)字节
N地址
158
(2)字N+1N地址
31高位字16
15低位字0
(3)双字N+3N+2N+1N地址
63高位双字32
31低位双字0
(4)四字N+7N+6N+5N+4N+3N+2N+1N地址
.存储单元以字节为最基本单位存储信息.
.存储单元的地址从0开始编号,机器中地址以二进制数表示,无符号数,书写用十六进制.
字长16位表示地址,可表示多少字节单元.
210=1024=1K
216=65536=64K0---65535
地址编号十六进制:
0---FFFFH
.一个存储单元中存放的信息称为该存储单元的内容。
(0004)=78H字节单元
(0005)=56H字节单元
(0004)=5678H字单元,高位在高地址。
(0004)=12345678H双字单元,高位在高地址。
地址
低址
内容
0004H
78H
0005H
56H
0006H
34H
0007H
12H
2.3.2实模式存储器寻址
用什么办法提供20位地址.
16位段地址0000
000016位偏移地址
20位物理地址
16dx段地址+偏移地址=物理地址
代码段CS
数据段DS
堆栈段SS
附加段ES
*8088/8086只能工作在实模式(实模式寻址1M),其他可实模式/保护模式。
保护模式:
支持多任务处理,扩大寻址范围。
支持虚拟存储(把外存看作内存),
程序员编程无内存限制。
15,031,0内存
单元
选择器
所选段最大
4GB
地址转换
段基地址物理地址
选择器放在段寄存器中,但不直接表示段基地址,由操作系统完成转换。
2.4外部设备
.主机通过I/O接口与外设交换数据的。
每个I/O
接口电路中都有如下
三个寄存器:
数据寄存器
状态寄存器
命令寄存器
.端口PORT16位二进制代码0000--FFFFH
.通过调用例行程序进行
BIOSBasicInput/OutputSystem
(存在ROM中)
DOSDiskOperatingSystem
(存在磁盘中,完成比BIOS更高的功能)
第二章汇编语言程序实例及上机操作
2.1汇编语言程序实例
例2.1编写从键盘输入单个字符,并将该字符的下一个字符显示输出的程序。
codesegment
assumecs:
code
start:
movah,1
int21h
movdl,al
adddl,1
movah,2
movah,4ch
codeends
endstart
键入A接着显示B,键入K接着显示L
例2.2编写显示“HELLO,WORLD!
”的程序。
datasegment
Stringdb‘HELLO,WORLD!
$’
dataends
codesegment
code,ds:
data
movax,data
movds,ax
movdx,offsetstring
movah,9
显示HELLO,WORLD!
详见教材P31表2.1
2.2建立汇编语言的工作环境
2.2.1为运行汇编语言程序至少要在磁盘上建立以下文件:
1、编辑程序EDIT.EXE
2、汇编程序MASM.EXE
3、连接程序LINK.EXE
4、调试程序DEBUG.EXE
必要时还需建立CREF.EXE等文件
2.2.2建立ASM文件
在DOS的提示符下,输入EXE文件的文件名。
如:
C>EDIT↓
C>EDIT文件名.ASM↓例如文件名为LI21.ASM
C>
在EDIT程序中,将我们编写的汇编程序输入到计算机中,并将LI21.ASM保存ASM源程序。
然后退出EDIT程序,回到DOS状态。
2.2.3用MASM程序产生OBJ文件
源程序建立后,就要用汇编程序对源文件汇编,汇编后产生二进制的目标文件(OBJ文件),其操作与汇编程序回答如下:
C>MASMLI21.ASM↓
Microsoft(R)MacroAssmblerVersion6.0
Copyright(C)MicrosoftCorp1981-1985,1987,Allrightsreserved
Objectfilename[LI21.OBJ]:
↓
Sourcelisting[NUL.LST]:
LI21
Cross-reference[NUL.CRF]:
51646+447778Bytessymbolspacefree
0WarningErrors
0SevereErrors
li21.OBJ目标文件,这是汇编的主要目的
li21.LST列表文件,可有可无
li21.CRF交叉引用表,可有可无
0WarningErrors警告错误宏指令
0SevereErrors严重错误
2.2.4用LINK程序产生EXE文件
汇编程序已产生出二进制的目标文件(OBJ),但OBJ文件并不是执行文件,还必须用连接程序(LINK)把OBJ文件转换为可执行的EXE文件。
当然,如果一程序由多个模块组成时,也应该通过LINK把它们连接在一起。
操作如下:
C>LINKLI21.OBJ↓
Microsoft(R)MacroAssmblerVersion5.0
Runfile[LI21.ASM.EXE]:
ListFile[NUL.MAP]:
ex_movs
Libraries[.LIB]:
LINK:
WarningL4012:
nostacksegment
两个输入文件两个输出文件
OBJ文件EXE文件
LIB文件MAP文件
2.2.5运行程序或称程序的执行
在建立了EXE文件后,就可以直接在DOS的提示符下,输入EXE文件的文件名。
C>LI21↓
2.2.6介绍COM文件
COM文件也是一种可执行的程序。
EXE文件也是一种可执行的程序。
2.3DEBUG主要命令
C>DEBUG↓
–
C>DEBUG<要调试的程序>↓
DEBUG的主要命令
-D显示内存内容
格式1:
D地址
从指定的地址开始,显示40H字或80H字节
格式2:
D范围
显示指定范围的内容
-E修改内存单元内容
E地址内容表
用给定的内容表去代替指定范围的内存单元的内容
E地址
可连续逐个修改内存单元的内容。
按CR键结束E命令
-R检查和修改寄存器内容
R
将显示所有寄存器内容和全部标志的状态,
现行的CS:
IP所指的指令的机器码和反汇编符号
R寄存器名
可检查和修改寄存器内容,若不修改其内容,则按CR键;
若要修改,可输入修改后的1~4个16进制字符值,再按CR键。
格式3:
RF
显示标志和修改标志位状态。
-G运行命令
格式:
G[=地址][地址]…[地址]
该命令还可以在程序运行中设置断点。
1、第一个参数“=地址”规定了执行的起始地址,
2、以CS内容作段地址,以等号后面的地址值作为地址偏移量,
3、=不能省掉。
若省掉起始地址,则以CS:
IP作为起始地址。
4、后面的地址数是断点地址,最多可设置10个断点.
5、地址参数所指的单元,必须包含有有效的8088指令
6、堆栈必须至少包含有6个可用字节。
7、若断点地址只包含地址偏移量,则段地址在段寄存器CS中。
-T跟踪命令
T[=地址]
可以在指令执行中逐条进行跟踪,若省去地址,则从CS:
IP现行值执行。
T[=地址][值]
可对多条指令进行跟踪(在执行了由值所指定的若干条指令后,执行就停下来,并显示各寄存器的内容和标志位状态)。
-A汇编命令(输入程序)
若在调试目标程序的过程中,要改写或增补一段目标程序,则可以用A命令直接在DEBUG下实现。
A[地址]
该命令可以从指定的地址开始,将输入的汇编语言语句汇编成机器代码,连续存放在内存单元中。
若命令中未指定地址,且前面用过汇编命令A的话,则接着上一个汇编命令的最后一个单元开始存放;
若前面未用过汇编命令,则从CS:
0100H单元开始存放。
在程序完毕后,最后一行不输入内容,直接按回车CR,即可返回到DEBUG程序。
并可用反汇编命令U验证输入的程序是否正确。
-U反汇编命令
U地址
该命令从指定的地址开始,反汇编16个字节或32个字节,若省去指定地址,则以上一个U命令反汇编的最后一条指令的地址的下一个单元作为起始地址;
若没用过U命令,则以由DEBUG初始化的段寄存器值作为段地址,以100H作为地址偏移量。
U范围
对指定范围的内存单元进行反汇编,范围可以由起始地址、结束地址或起始地址及长度来确定。
-I输入命令
I端口地址
该命令从指定的端口输入一个字节并显示。
-O输出命令
O端口地址字节值
该命令能向指定的端口输出