分类:N08_C与汇编
汇编语言仍在发挥不可替代的作用:
效率
运行效率:开发软件的核心部件,快速执行和实时响应开发效率:做适合的事,开发效率无敌
底层:计算机及外围设备的驱动程序
操作系统的内核嵌入式系统:家用电器、仪器仪表、物联网等等
汇编语言在学习计算机中起到的独特作用-直击计算机系统的核心
便于加深对计算机原理和操作的理解通过学习和使用汇编语言,能够感知,体会和理解及其的逻辑功能
向上为理解各种软件系统的原理,打下技术理论基础向下为掌握硬件系统的原理,打下实践应用基础
学会底层的程序调试和错误分析方法
机器语言是机器指令的集合
机器指令是一台机器可以正确执行的命令
机器指令是由一串二进制数表示,例:01010000
电平脉冲:高低电平组成
早期程序员门的工作状态
将0、1的数字编程的程序代码打在卡带或卡片上,1打孔,0不打孔,再将程序通过纸带机或卡片机输入计算机,进行运算。
汇编语言的主题是汇编指令
汇编指令和机器指令的差别在于指令的表示方法上
汇编指令是机器指令便于记忆的书写格式汇编指令是机器指令的助记符
机器指令:1000100111011000
操作:将寄存器BX的内容送到AX中
汇编指令:MOV AX BX
寄存器:CPU中可以存储数据的器件,一个CPU中有多个寄存器
用汇编语言编写程序的工作过程程序员->编写->汇编指令->经过编译器->生成->机器码
;汇编语言程序实例
assume cs:codesg
codesg segment
start:
mov ax, 0123H
mov bx, 0456H
add ax, bx
add ax, ax
mov ax, 4c00h
int 21h
codesg ends
end
以上代码说明:
伪指令(由编译器执行)如:assume, codesg汇编指令(机器码的助记符)如:mov, add其他符号(由编译器识别)如:start, end
8086CPU有14个寄存器
通用寄存器:AX、BX、CX、DX
变址寄存器:SI、DI
指针寄存器:SP、BP
指令指针寄存器:IP
段寄存器:CS、SS、DS、ES
标志寄存器:PSW
共性
8086CPU所有的寄存器都是16位的,可以存放2个字节
学习汇编指令 - 用中学
汇编指令 | 控制CPU完成的操作 | 用高级语言的语法描述 |
---|---|---|
mov ax, 18 | 将18送入AX | AX =18 |
mov ah, 78 | 将78送入AH | AH = 78 |
add ax, 8 | 将寄存器AX中的数值加上8 | AX=AX+8 |
mov ax, bx | 将寄存器BX中的数据送入寄存器AX | AX=BX |
add ax, bx | 将AX,BX中的内容相加,结果存到AX中 | AX=AX+BX |
注:汇编指令不区分大小写
物理地址
CPU在访问内存时,用一个基础地址(段地址X16)和一个相对于基础地址的偏移地址相加,给出内存单元的物理地址
物理地址 = 段地址X16 + 偏移地址例如:
用两个16位地址(段地址、偏移地址)合成一个20位的物理地址
8086有20位地址总线,可传递20位地址,寻址能力为1M
8086是16位结构的CPU
CPU访问内存单元时要给出内存单元的地址
所有的内存单元构成的存储空间室一个一维的线性空间
每一个聂村单元在这个空间中都有唯一的地址,这个唯一的地址称为物理地址
事实
问题:8086如何处理在地址空间上的这个矛盾
8086CPU的解决办法:
地址加法器合成物理地址的方法
段地址:1230
+ 偏移地址: 00C8
---------------
物理地址:123C8
本质含义:
运行器一次最多可以处理16位的数据,寄存器的最大宽度为16位
在8086内部处理的、传输、暂存的地址也是16位,寻址能力也只有64KB
8086CPU用“(段地址X16)+偏移地址= 物理地址”的方式给出内存单元的物理地址
存层并没有分段,段的划分来自于CPU
起始地址(基础地址)为10000H
段地址位1000H,大小为100H
或者:
起始地址(基础地址)为10000H和10080H,
段地址为1000H和1008H,大小均为80H
物理地址 | 段地址 | 偏移地址 |
---|---|---|
21F60H | 2000H | 1F60H |
21F60H | 2100H | 0F60H |
21F60H | 21F0H | 0F60H |
21F60H | 21F6H | 0000H |
21F60H | 1F00H | 2F60H |
在8086PC机种存储单元地址的表示方法
例如:数据在21F60H内存单元中,段地址是2000H,说法
(a)数据存在内存2000:1F60单元中;
(b) 数据存在内存的2000H段中的1F60H单元中
偏移地址16位,变化范围为0-FFFH,用偏移地址最多寻址64KB
例:给定段地址2000H,用偏移地址寻址的范围:20000H-2FFFFFH,共64K
4个段寄存器:
CS-代码寄存器
DS-数据段寄存器
SS-栈段寄存器
ES-附加段寄存器
偏移地址可以用多种方式提供- 8086丰富的取址方式
Debug 是DOS系统中的著名的调试程序,也可以运行在windows系统模式下
使用Debug程序,可以查看CPU各种寄存器中的内容、内存的情况,并且在机器指令级跟踪程序的运行
CS:代码段寄存器
IP:指令指针寄存器
CS:IP :CPU将内存中CS:IP 指向的内容当作指令执行
示例:在CS和IP指示下代码的执行
8086CPU当前状态:CS中内容为2000H,IP中内容为0000H,通过地址加法器获得内存实际地址,并通过数据总线将指令输入到指令缓冲器,等待cup执行。
内存20000H-20009H处存放着可执行的机器代码
8086PC工作过程的简要描述:
1.从CS:IP 指向内存单元读取指令,读取的指令进入指令缓冲器
2.IP = IP + 所读取指令的长度,从而指向下一条指令
3.执行指令,转到步骤1,重复这个过程