汇编语言基础知识-寄存器
寄存器是距离CPU中最近的存储单元,对于现代CPU其获取数据的顺序往往是 CPU==>寄存器==>一级缓存==>二级缓存==>三级缓存==>内存==>磁盘。对于CPU来说其只与寄存器进行存储交互
通用寄存器结构
对于8086CPU其寄存器都是16位的,可以存放2个8bit字节,AX,BX,CX,DX通常存放一般性的数据,成为通用寄存器,
寄存器的逻辑架构
对于一个通用寄存器来说其能够存储的最大值2^16-1,
为了与上一代CPU的8位寄存器兼容常常将16位寄存器拆分为两个8位寄存器
- AX AH AL
- BX BH BL
- CX CH CL
- DX DH DL
汇编指令
对于16位寄存器其最多能够保存4位16进制数据,运算时超出的部分则存储在其他容器当中。
CPU-物理地址
对于8086CPU其外部地址总线数量为20 因此需要通过5个十六进制数组合其范围在[00000H~FFFFFH]之间,但CPU内部地址总线长度为16只能容纳4个16进制数据,因此CPU通过地址加法器将两个地址通过移位加法操作合并为一个外部地址。通常这两部分地址称为段地址,偏移地址。
物理地址=段地址*16+偏移地址
偏移地址由四个十六进制数组成范围在 [0000H~FFFFH]之间
段地址由四个十六进制数组成范围在 [0000H~FFFFH]之间
在组合过程中段地址常常为16的整数倍一次寻址空间为2^16=64KB
CS IP
CS以及IP是CPU中最重要的两个寄存器之一,CS作为代码寄存器,IP作为指令寄存器,在8086的CPU当中CPU从内存M*16+N单元开始,读取指令并执行
通过上述过程我们可以得知8086CPU的工作流程包括
- 从CS:IP寄存器读取指令,将指令加入缓冲器
- IP=IP+上次执行的指令长度 指向下一条指令
- 执行指令 返回步骤一
在实际汇编编写中我们可以通过JMP CS:IP的方式将当前指令指向人为设定的 CS(段地址): IP(偏移地址) 地址,CPU后续将执行我们指定的地址
如果仅仅只希望更改IP偏移地址那么可以使用 jmp 某一合法寄存器 指令完成
课后题2.1
TITLE Add and Subtract
INCLUDELIB kernel32.lib
.MODEL flat,stdcall
;.code
ExitProcess PROTO,
dwExitCode:DWORD
.data
.code
main PROC
mov AX,2 ;
ADD AX,AX
ADD AX,AX
ADD AX,AX
push 0h
call ExitProcess
main ENDP
END main
课后题2.2
- 00010H 1000FH
- 1001H 2000H
- <1001H >2000H
课后题2.3
- 将bx赋值给ax IP修改一次
- 将ax减去ax IP修改一次
- 执行跳转ax指令 IP修改一次
- 将IP修改为ax的值 IP修改一次
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)