经常用到的寄存器有 cs, ds, ss, es, ax, bx, cx,dx, si, di, sp, bp, ip, psw。
- cs: ip 指定cpu 要读取指令的地址
- ss:sp 制定栈内存的地址
- ds 默认的段地址
- cx loop指令执行的时候进行2步操作(cx=cx -1 ; 判断cx的值)
汇编第三章:
* CPU 提供的栈机制(SS:SP指向栈顶元素)*
push ax 的执行, 由一下两步完成:
(1) sp=sp - 2
(2) 将ax的内容送入ss:sp指向的内存单元。
pop 的执行步骤:
(1) 从SS:SP指向的字单元中读取数据
(2) sp = sp + 2
汇编语言第八章:
第九章:
可以修改IP, 或同时修改CS和IP的指令统称为转移指令。(CS:IP cpu根据CS:IP指定的内存地址处开始执行)
- 段内转移:
- 段间转移:
转移指令分类:
- 无条件转移指令(如:jmp)
- 条件转移
- 循环指令(:loop)
- 过程
- 中断
9.1 offset(取标号的偏移地址)
s0: mov ax, offset s0
9.2 jmp 指令(功能: IP = IP + 8位位移(-128~127))
jmp short 标号(段内转移)
jmp short 标号 指令对应的机器指令,并没有包含具体的目的地址, 而是包含转移的位移, 这个位移是编译器根据
汇编中的标号计算出来的。
* jmp short label((功能: IP = IP + 8位位移(-32768~32767))): 段内近转移 *
start: mov ax, 0123H
jmp short s0
s0: mov bx, 1234H
* jmp near ptr label(功能: IP = IP + 16位位移):*
start: jmp near ptr s
s: mov ax, 1111h
* jmp far ptr label() 段间转移 *
start: jmp far ptr s
db 256 dup (0)
s: mov ax, 1111h
* 转移地址在内存单元中 *
(1) jmp word ptr 内存单元地址(段内转移)
mov ax, 0123H
mov ds:[0], ax
jmp word ptr ds:[0]
or
mov ax, 0123H
mov [bx], ax
jmp word ptr [bx]
(2) jmp dword ptr 内存单元地址(段间转移)
* 功能: 从内存单元地址处开始存放着两个字, 高地址处的字是转移的目的段地址, 低地址处是转移的目的偏移的地址。 *
(CS) = (内存单元地址 + 2)
(IP) = (内存单元地址)
mov ax, 0123H
mov ds:[0], ax
mov word ptr ds:[2], 0
jmp dword ptr ds:[0]
or
mov ax, 0123H
mov [bx], ax
mov word ptr [bx+2], 0
jmp dword ptr [bx]
chapter 12 内中断
任何一个通用的CPU, 都具备一种能力, 可以在执行当前正在执行的指令后, 检测CPU外部发送过来的
或内部产生的中断信息, 并且立即对所接收的信息进行处理。
未完待续