汇编语言学习1

一、汇编语言的组成

1. 汇编指令

机器码的助记符,有对应的机器码。

2. 伪指令

没有对应的机器码,由编译器执行,计算机并不执行。

3. 其他符号

如+、-、*、/ 等,由编译器识别,没有对应的机器码。

image-20241108140736261

4. 环境搭建

dosbox

debug.exe

二、寄存器

1. 通用寄存器

数据寄存器:AX,BX,CX,DX

al:低八位

ah:高八位

字:2个字节,16位

bx 一般存放偏移地址

mov ax,[bx],表示将段地址为ds,偏移地址为bx的内存单元送入ax

类似于mov ax,[0]

变址寄存器:SI,DI,SP,BP

段寄存器:CS,DS,SS,ES(附加数据段Extra Segment)

指令指针寄存器:IP

2. CS和IP

指令和数据都是二进制信息。

由CS:IP指向的内存的数据为指令。

CS:代码段寄存器。

IP:指令指针寄存器。

任意时刻,CPU将CS:IP指向的内容当做指令执行。

8086PC机中,任意时刻,设CS中的内容为M,IP中的内容为N,8086CPU将从内存M*16+N单元开始读取一条指令并执行。

修改CS:IP指令:

jmp 段地址:偏移地址,执行后,cpu会从jmp后的地方开始读取指令

若仅想修改IP的内容,可以用jmp 某一合法寄存器,例如jmp ax,将IP的值修改为寄存器ax中的值。

3. CS,DS,SS,ES(段寄存器)

cs:代码段寄存器

ds:数据段寄存器

ss:堆栈段寄存器

栈空间:高地址向低地址方向增长。

image-20241108210755091

es:扩展段寄存器

4. 简单指令

mov,add,sub,push,pop

push 寄存器 ;寄存器数据入栈

pop 寄存器 ;出栈数据到寄存器

三、第一个汇编程序

image-20241108205113999

segment 和 ends定义一个段,段名称codesg。

一个汇编程序由多个段组成(存放代码,数据或当做栈空间来使用。)

end汇编程序结束标志。

assume,假设某一段寄存器和程序中的某一个segment…ends定义的段关联。

image-20241108205803601

PSP:程序段前缀,DS寄存器指向SA:0处,程序开始在SA+10H:0处。

image-20241126142414990