本文基于8086CPU,是一个16位机器,属于x86系列,但是直到80386CPU才是32位
- ax,ah,al,bx,都是寄存器
- ds是一个段寄存器
- ax是一个十六位的寄存器
- ah,代表ax的前八位,al是ax的后八位,分别可以作为寄存器
- mov ax,18 将18存入寄存器ax
- mov ax,bx 将bx中的数据存入ax
- add ax,8 将ax内的数值加上8 sub ax,8 将ax内的数值减去8
- add ax,bx 将ax与bx中的数值相加,结果存入ax
- 注意在进行数据传送或运算的时候两个操作对象的位数应该是一样的,也不能爆位数,(8位寄存器存入最大值为255)
- cs与ip, 程序调用指令时要先找到需要调用的指令,这时候就要用到cs与ip了,计算方法是:cs*16(机器位数) + ip
- jmp 2AE3:3 程序跳转到cs:2AE3,ip:3的位置,CPU将在2AE33H处读取指令,类似mov CS,2AE3 IP,3
- jmp ax, 将ip值改为ax 类似 mov Ip,ax
- 数据不能直接送入段寄存器
- mov bx,[2] 将ds中的数据ds:3存入高八位,ds:2存入低八位
1000H:
23
11
22
66
cod:
mov ax,1000H
mov ds,ax
mov ax,[0]
mov bx,[2]
exp:
将ax赋值为1000H
将ds的初始位置绑定为1000H
将ax的高八位变成ds[1],低八位变成ds[0]
- push ax 将ax入栈 pop ax 出栈一个元素,存入ax
cod:
mov ax, 1234H
push ax
stack:自下而上地址值减小
34
12
- stack存储分为SS与SP
- SS为栈开始位置的八位地址
- SP为栈所在栈中栈顶元素位置
- SS:SP为当前地址