zoukankan      html  css  js  c++  java
  • [汇编语言]-第九章 jcxz,loop指令,转移位移的意义

     1- jcxz指令

       指令为有条件转移指令, 所有的有条件转移指令都是短转移, 在对应的机器码中包含转移的位移, 而不是目的地址, 对IP的修改范围为: -128 ~ 127

      指令格式: jcxz 标号(如果(cx) = 0 ,转移到标号处执行)

     1 ;利用jcxz指令,现实在内存2000H段中查找第一个值为0的字节,找到后,将它的偏移地址存储在dx中.
     2 assume cs:codesg
     3 codesg segment
     4 start:    mov ax,2000H
     5         mov ds,ax
     6         mov bx,0
     7     s:    mov cl,[bx]
     8         mov ch,0
     9         jcxz ok
    10         inc bx
    11         jmp short s
    12         
    13     ok:    mov dx,bx
    14         
    15         mov ax,4c00h
    16         int 21h
    17 codesg ends
    18 end start

    2- loop指令

      loop指令为循环指令, 所有的循环指令都是短转移, 在机器码中包含转移的位移, 而不是目的地址, 对IP的修改范围为 -128~127

      指令格式: loop 标号 ((cx) = (cx) - 1, 如果(cx) != 0, jmp short s)

    3- 根据位移进行转移的意义

      jmp short s

      jmp near ptr s

      jcxz s

      loop s

      以上都是通过位移进行转移.

      mov cx,6      B9 06 00

      mov ax,10    B8 10 00  

     s: add ax,ax    01 C0

      loop s       E2 FC

      FC = 1111 1100 = -4 表示执行到loop s之后, 前移4个字节

    4- 编辑器对转移位移超界的检测

    1 assume cd:code
    2 code segment
    3 start: jmp short s
    4          db 128 dup (0)
    5       s: mov ax,0fffh
    6 code ends
    7 end start

      jmp short s转移的范围 -128~127 ,IP最多向后移动127个字节.

      以上程序编辑器将报错,转移范围超出界限.

    5-

     1 assume cs:codesg
     2 codesg segment
     3 
     4         mov ax,4c00H
     5         int 21h
     6 start:
     7         mov ax,0
     8     s:
     9         nop
    10         nop
    11         
    12         mov di, offset s
    13         mov si, offset s2
    14         mov ax,cs:[si]
    15         mov cs:[di],ax
    16     s0: jmp short s
    17     s1: mov ax,0
    18         int 21h
    19         mov ax,0
    20     s2: jmp short s1
    21         nop
    22         
    23 codesg ends
    24 end start

     执行完 mov cs:[di],ax后 是把s2标号处的语句复制到s处.

  • 相关阅读:
    监控Linux系统性能命令---sar
    用SecureCRT来上传和下载文件 rz sz
    CentOS7 Firewall NAT 及端口映射
    CentOS 修改主机名
    CentOS 6.X如何更改网卡名称
    MySQL数据操作
    mysql如何修改数据表
    Zabbix图形中中文字体显示方块
    Linux虚拟机模板的创建
    Java web项目JXl导出excel,(从eclipse上移动到tomact服务器上,之路径更改)
  • 原文地址:https://www.cnblogs.com/galoishelley/p/3579992.html
Copyright © 2011-2022 走看看