王爽第九章依据位移进行转移的jmp指令
来源:互联网 发布:学会python要多久 编辑:程序博客网 时间:2024/05/01 07:43
assume cs:codecode segment start:mov ax,0<span style="font-family: Arial, Helvetica, sans-serif;">jmp short s</span><span style="white-space:pre"></span>add ax,1s:inc axmov ax,4c00hint 21hcode endsend start
其中
jmp short s相当于
jmp short 8
机器码eb之后的是位移
1、段内近转移的8位位移 = 标号处的地址 - jmp 指令后的第一个指令的地址
2、short 指明此处是的位移是8位位移
3、8位位移的范围为-128 ~ 127,用补码来表示 -128 = 80 127=7f
4、8位位移由编译程序在编译中算出
assume cs:codecode segment start:mov ax,0mov bx,0jmp far ptr sdb 256 dup (0)s:add ax,1inc axmov ax,4c00hint 21hcode endsend start其中
jmp far ptr s的机器码要占5个字节
mov ax,0mov bx,0的机器码占6个字节
db 256 dup (0)占256个字节
一共267个字节,16进制10b
还是同一个段
cs没有变 ip = 6 + 5 + 256 = 267 十六进制 10b
010b 为IP
1ca5 为cs
assume cs:codedata segmentdd 0data endscode segment start:mov ax,datamov ds,axmov bx,0jmp word ptr [bx+1]mov ax,4c00hint 21hcode endsend start其中
jmp word ptr [bx+1]功能:从内存单元地址处开始存放一个字,是转移的目的偏移地址
assume cs:codedata segmentdd 12345678hdata endscode segment start:mov ax,datamov ds,axmov bx,0mov [bx],bxmov [bx+2],csjmp word ptr ds:[0]mov ax,4c00hint 21hcode endsend start其中
jmp word ptr ds:[0]cs= ds[2] ip= ds[1]
功能:从内存单元地址处开始存放着两个字,高地址处的字是转移的目的的地址,低地址处是转移的目的偏移地址
(cs) = (内存单元地址 + 2)
(ip) = ((内存单元地址)
assume cs:codecode segment start:mov ax,2000mov ds,axmov bx,0s:mov cl,ds:[bx]mov ch,0jcxz okinc bxjmp short sok:mov dx,bxmov ax,4c00hint 21hcode endsend start其中
jcxz ok的作用 当(cx) = 0 时, (ip) = (ip) + 8位位移
8位位移 = 标号处的地址 - jcxz 指令后的第一个字节的地址
8位位移的范围为 -128 ~ 127 ,用补码表示
8位位移由编译程序在编译时算出
当(cx) ≠ 0时, 什么都不做(程序向下执行)
jcxz 标号的作用相当于:
if ((cx) == 0) jmp short 标号
cx = 0 ip=c
8位位移 = 11 - c -2 =3
assume cs:codecode segment start:mov ax,2000mov ds,axmov bx,0s:mov cl,[bx]mov ch,0inc cxinc bxloop sok:dec bxmov dx,bxmov ax,4c00hint 21hcode endsend start其中
loop sloop 指令为循环指令
操作
(1) (cx) = (cx) - 1
(2) 如果 (cx) ≠ 0, (ip) = (ip) + 8 位位移
8位位移 = 标号处地址 - loop指令后的第一个字节的地址
8位位移的范围为 -128 ~ 127,用补码表示
8位位移由编译程序在编译时算出
如果(cx) = 0 ,什么都不做
e+1 = f
f6 + 8 + 2 = 100 f6是-10 的补码
标号处 08 loop后 12 08-12 = f6
assume cs:codecode segment mov ax,4c00hint 21hstart:mov ax,0s:nopnopmov di,offset smov si,offset s2mov ax,cs:[si]mov cs:[di],axs0:jmp short ss1:mov ax,0int 21hmov ax,0s2:jmp short s1nopcode endsend start其中
mov di,offset smov si,offset s2mov ax,cs:[si]mov cs:[di],ax把
jmp short s1
位移位10个字节
复制到nopnop同样位移为10个字节
这条指令会直接让程序中断
assume cs:code,ds:datadata segment db 'W','e','l','c','o','m','e',' ','t','o',' ','m','a','s','m','!'data endscode segmentstart: mov ax,data mov ds,ax mov ax,0b800h;b800是显示缓冲区的首地址 mov es,ax;在显示缓冲区中,偶地址存放字符,奇地址存放字符的颜色属性,默认07,黑底白字 mov bx,0720h;十六进制a0h表是第1行,第12行就是a0h*bh=6e0h,一行放80个字符,放到中间的话 ;就40个字符-16个字符的一半=32个字符,一个字符要两个字节,所以偏移地址加上64,也就是40h,;40h+6e0h=720h mov bp,0;从第一个字符读取 mov cx,16;空格也算字符s: mov al,ds:[bp];放字符到寄存器 mov ah,2h;放字符的颜色属性,显示绿色,10 mov es:[bx],ax;放字符和字符颜色属性到内存 mov al,ds:[bp] mov ah,24h;绿底红字 100100 mov es:[bx+160],ax ;80个字符占160个字节,到第二行 mov al,ds:[bp] mov ah,71h;1110001 白底蓝字 mov es:[bx+320],ax ;80个字符占160个字节,到第三行 add bx,2;一次送了2个字节,按字来读取 inc bp;数据段按字节存储,bp就按字节读取 loop s;循环16次 mov ax,4c00h int 21hcode endsend start
0 0
- 王爽第九章依据位移进行转移的jmp指令
- 转移地址在寄存器的JMP指令
- 汇编转移指令jmp原理
- 转移指令jmp和跳转指令call
- [汇编学习笔记][第九章转移指令的原理]
- 汇编语言学习第九章-转移指令的原理
- 转移地址在内存中的JMP指令
- 【汇编】JMP跳转指令的指令长度、直接转移与间接转移、段内跳转与段间跳转
- Jmp指令的格式
- 王爽《汇编语言》(第二版) 学习笔记 (第九章 转移指令的原理 )
- 王爽《汇编语言》(第二版) 学习笔记 (第九章 转移指令的原理 )
- 汇编指令jmp的理解
- jmp指令对应的机器码
- jmp指令对应的机器码
- jmp指令的机器码编写
- jmp指令
- JMP指令
- jmp指令
- 新手必看之UILabel
- Codeforces Round #328 (Div. 2)
- Django中与Html相关的filter
- UFT
- 使用帧缓冲区进行三维交互
- 王爽第九章依据位移进行转移的jmp指令
- hdu1248寒冰王座【完全背包入门题】
- HANA学院(7)- (5)从SAP HANA Studio连接到SAP HANA
- jfinal集成spring cxf做webservice服务
- [sicily]1509. Rails
- 软件工程师进阶系列——万变不离其宗(设计模式下午题大盘点)
- linux 套接口缓存
- 正确理解hadoop 2.x 的环形缓冲区: (一) MR环形缓冲区的结构
- 《数据结构(严蔚敏版)》学习笔记(五)——串的模式匹配算法