2021-05-17(汇编1)

2022-06-19  本文已影响0人  x92n

汇编语言是很多相关课程(如数据结构、操作系统、微机原理等)的重要基础。其实仅从课程关系的角度讨论汇编语言的重要性未免片面,概括地说,如果你想从事计算机科学方面的工作的话,汇编语言的基础是必不可缺的。原因很简单,我们的工作平台、研究对象都是机器,汇编语言是人和计算机沟通的最直接的方式,它描述了机器最终所要执行的指令序列。想深入研究英国文化,不会英语行吗﹖汇编语言是和具体的微处理器相联系的,每一种微处理器的汇编语言都不一样,只能通过一种常用的、结构简洁的微处理器的汇编语言来进行学习,从而达到学习汇编的两个最根本的目的:充分获得底层编程的体验,深刻理解机器运行程序的机理。这两个目的达到了,其他目的也就自然而然地达到了。举例来说,你在学习操作系统等课程时,对许多问题就会有很通透的理解。

机器语言是机器指令的集合

书写和阅读机器码程序不是一件简单的工作。。。。

汇编指令方便阅读和记忆,例如机器指令1000100111011000表示把寄存器BX的内容送到AX中,汇编指令则写成 mov ax,bx

汇编语言的组成:

1.汇编指令:机器码的助记符,有对应的机器码

2.伪指令:没有对应的机器码,由编译器执行,计算机并不执行

3.其他一些符号:比如 + - * / 由编译器识别,没有对应的机器码

存储单元


2022-06-19_164934.png

大容量存储器计量单位:
KB、MB、GB

一个典型的CPU大概由运算器、控制器、寄存器构成。
外部总线实现CPU和主板上其他器件的联系。
内部总线实现CPU内部各个部件的链接

8086CPU有14个16位寄存器 AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW

image.png

16位寄存器可以存储的最大的数为2的16次方-1
n位寄存器可以存储最大的数为2的n次方-1

AX、BX、CX、DX这4个通常用来存放一般性的数据,被称为通用寄存器

二进制数中低位在右边,高位在左边。

为了兼容上一代8位CPU,可分为2个8位寄存器使用:

AX可分为AH和AL BX   BX可分为BH和BL  CX分为CH和CL   DX分为DH和DL

8086cpu一次性处理2种尺寸数据:字节(byte) 字(word) 一个字等于两个字节

mov ax,18 将18送入寄存器AX AX = 18

mov ah,88 将88送入寄存器AH中 AH=88

add ax,8 AX = AX+8

mov ax,bx AX的值 = BX

add ax,bx ax = ax+bx

注意寄存器位数(源操作数和目的操作数位数要一致)

正确用法 不正确用法

mov bx,ax mov ax,bl

mov ax,18H mov al,20000

add ax,bx

add ax,2000


题目一、
程序段中的指令 指令执行后AX中的值 指令执行后BX中的值
mov ax,4E20H 4E20H 0000H
add ax,1406H 6226H 0000H
mov bx,2000H 6226H 2000H
add ax,bx 8226H 2000H
mov bx,ax 8226H 8226H
add ax,bx ? 8226H


一个16进制位是4个二进制位。

8086有20根总线,可以传送20位地址,寻址能力达到1MB,但是寄存器只有16位,所以采用2个16位地址合成的方法来形成20位地址

16位结构寻址 2^16 65536bit = 64kb


2022-06-19_172618.png

寻址123c8H的内存单元 地址加法器采用段地址 x 16 + 偏移地址的方法合成物理地址,其实就是用一个基础地址加上一个偏移地址

比如要表示一个4位数1023,但只有两个可以写3位数的纸条,我们可以在第一个纸条写100,第二个纸条写023,然后第一个100乘以10,加上023,就可以表示1023

编程的时候可以根据需要将若干地址连续的内存单元看做一个段,内存实际上并未分段,是8086CPU自己想出来的。偏移地址是16位,所以一个段的最大长度是64KB FFFF

段地址必须是16的倍数。


1.给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为_______到________。
2.有一段数据存放在内存20000H的单元中,现给定段地址为SA,若想用偏移地址去寻址到这个单元,则SA满足的条件
是:最小为________,最大为_____________


段寄存器提供段地址,8086CPU有4个段寄存器:CS DS SS ES

CS和IP它们指示了CPU当前要读取指令的地址,CS叫代码段寄存器,IP为指令指针寄存器。SS叫栈段寄存器,ES为附加段寄存器

在任意时刻,8086CPU将从CS的内容x16+ip的内容单元处开始读取一条指令执行

8086PC读取和执行指令的相关部件

CPU读取执行指令步骤:

1.从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器

2.IP = IP+读取的指令的长度,指向下一条指令

3.执行指令,执行完成转到步骤1,重复这个过程

8086CPU加电启动或复位后 CS和IP的值被设置为CS=FFFFH IP=0000H 开机后执行的第一条指令

改变cs:ip的指令 :jmp指令

同时修改cs和ip jmp 0fffh:0100h
仅仅修改ip内容,jmp,某个寄存器(mov ax,0fffh, jmp ax) jmp ax == mov ip,ax


作业
mov ax,bx
sub ax,ax
jmp ax
这3条指令执行后,CPU几次修改IP?都是在什么时候?,最后IP的值是多少


上一篇 下一篇

猜你喜欢

热点阅读