汇编 转移指令

Posted ʚVVcatɞ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编 转移指令相关的知识,希望对你有一定的参考价值。

jmp指令能够修改 IP 或 CS 或者同时修改的指令

  • CS:段地址
  • IP:偏移地址

通过以下指令,修改段地址和偏移地址

jmp 4000:0

在这里插入图片描述

jmp 2600:500

在这里插入图片描述
错误的修改CS和IP的方式:

mov cs,2000
mov ip,500
mov ip,ax

以上三条修改方式均是错误的修改方式。

注意:用以下方式虽然编译成功,但是也不能对CS进行正确的修改。

mov ax,500
mov cs,ax

在这里插入图片描述

但是用以下这种方式对IP进行修改:

mov ax,500
jmp ax

在这里插入图片描述

指令执行的过程:

  • 1.CPU从 cs:ip 所组成的地址中读取指令,将这个指令存放到指令缓存器中
  • 2.IP = IP + 所读指令的字节数
  • 3.执行指令缓存器中的内容,回到步骤 1 重复这个过程。

假设cs = 2000, IP = 0000, 写出指令执行的过程

a 2000:0
mov ax,6622   ; cs = 2000, ip = 0 + 3 = 3
jmp 1000:3     ;  cs =2000, ip= 3 + 5  = 8
mov cx,ax

a 1000:0        
mov ax,0123    ; cs = 1000  ip = 0 + 3 = 3
mov ax,0          ; cs = 1000  ip = 3 + 3 = 6
mov bx,ax       ; cs =  1000  ip = 6 + 2 =8
jmp bx              ;cs = 1000  ip = 0

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

例:

mov ax,bx     ; ax = bx
sub ax,ax      ; ax = ax - ax =0
jmp ax           
mov ax,bx     ; => 指令缓存器 => 1   =>  执行
sub ax,ax      ; => 指令缓存器 = > 1  = > 执行
jmp ax           ; => 指令缓存器 = > 1   => 执行 => 1

在这里插入图片描述

上面3条指令执行后,cpu 4次修改了IP,最后一次IP的值为0


用3条指令写入从2000:0开始的内存单元,利用3条指令计算 2 的 8 次方

mov ax,1
add ax,ax
jmp 2000:3

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


call指令,也属于转移指令
例如:
在这里插入图片描述
上面程序代码执行的顺序:

				call cpy_Boot                 ; 执行该代码后,会跳转到 cpy_Boot ,执行到ret 后跳转到 call cpy_Boot下面的代码继续执行。(类似 C语言的goto)
=============================================================
cpy_Boot:
				mov bx,1000H
				mov bx,1001H
				mov bx,1002H
				mov bx,1003H
				mov bx,1004H
				ret

				mov ax,1000H
				mov ax,1001H
				mov ax,1002H
				mov ax,1003H
				mov ax,1004H
				
				mov ax 4c00H
				int 21H

以上是关于汇编 转移指令的主要内容,如果未能解决你的问题,请参考以下文章

汇编语言--微机CPU的指令系统(转移指令)

汇编入门学习笔记 —— 转移指令

汇编转移指令

汇编语言转移指令&循环指令

汇编--控制转移指令 jmp

关于汇编的段内转移