汇编寄存器总结

来源:互联网 发布:js设置left值 编辑:程序博客网 时间:2024/06/05 11:33

经常用到的寄存器有 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指定的内存地址处开始执行)

  1. 段内转移:
  2. 段间转移:

转移指令分类:

  1. 无条件转移指令(如:jmp)
  2. 条件转移
  3. 循环指令(:loop)
  4. 过程
  5. 中断

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 s0s0: mov bx, 1234H

* jmp near ptr label(功能: IP = IP + 16位位移):*

start: jmp near ptr ss: 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, 0123Hmov ds:[0], axjmp word ptr ds:[0]ormov ax, 0123Hmov [bx], axjmp word ptr [bx]

(2) jmp dword ptr 内存单元地址(段间转移)
* 功能: 从内存单元地址处开始存放着两个字, 高地址处的字是转移的目的段地址, 低地址处是转移的目的偏移的地址。 *
(CS) = (内存单元地址 + 2)
(IP) = (内存单元地址)

mov ax, 0123Hmov ds:[0], axmov word ptr ds:[2], 0jmp dword ptr ds:[0]ormov ax, 0123Hmov [bx], axmov word ptr [bx+2], 0jmp dword ptr [bx]

chapter 12 内中断

任何一个通用的CPU, 都具备一种能力, 可以在执行当前正在执行的指令后, 检测CPU外部发送过来的
或内部产生的中断信息, 并且立即对所接收的信息进行处理。
未完待续

0 0