• 汇编指令分类


    汇编

    汇编语言包含两种指令:

    1. 汇编指令
    2. 伪指令

    伪指令

    没有对应的机器指令,最终不会被CPU执行。伪指令是编译器执行的指令。

    segement和ends

    segement 表示一个段的开始,ends表示一个段的结束

    段名 segment
    段名 ends
    
    比如:
    codesg segement
    codesg ends;
    

    end

    表示一个汇编程序的结束标记,编译器在编译的时候如果碰到了end,就会结束对源程序的编译

    assume

    假设某一段寄存器和程序中的某一个用segment...ends定义的段相关联。

    标号

    一个标号指代了一个地址,

    步过循环p

    遇到loop使用p来进行跳过

    跳到指定的语句g ip

    使用g ip跳到指定语句

    start 告诉程序的入口

    assume cs:code
    code segment
    	
    		dw 0123h, 0456h, 0789h, 0abch, 0defh, 0fedh, 0cbah, 0987h
    
    start:  mov bx, 0    ; 跳过前面的数据,不加start代码会从数据处开始
    		mov ax, 0
    
    		mov cx, 8	
    		s:add ax, cs:[bx]
    		add bx, 2
    		loop s
    
    		mov ax, 4c00h
    		int 21h
    
    code ends
    end start
    

    汇编指令

    汇编只有是有对应的机器码的指令,可以被便以为机器指令,最终为CPU所执行。

    loop

    assume cs:code
    
    code segment
    
    	mov ax,2
    
    	mov cx,11
    s:	add ax,ax
    	loop s
    
    	mov ax, 4c00H
    	int 21H
    
    code ends
    
    end
    

    loop 执行之后,寄存器cx会自动减一,直到减到0,跳出循环执行loop的下一条语句

    段前缀 ds, cs, ss, es

    指令mov ax, [bx]中,内存的那元的偏移地址由bx给出,而段地址默认在ds中。我们可以在访问内存单元的指令中显式地给出内存单元的段地址所在的段寄存器。

    例如

    mov ax, ds:[bx]
    mov ax, cx:[bx]
    mov ax, ss:[bx]
    mov ax, es:[bx]
    mov ax, ss:[0]
    mov ax, cs:[0]
    

    [bx+idata]

    表示一个内存单元,偏移地址+idata = 新的偏移地址

    常用格式, 下面的写法都是将bx + 200

    mov ax, [200 + bx]
    mov ax, 200[bx]
    mov ax, [bx].200
    

    SI和DI

    SI和DI是8086CPU中和BX功能相近的寄存器

    下面3组指令实现了相同的功能

    ; 1
    mov bx, 0
    mov ax, [bx]
    ;2
    mov si, 0
    mov ax, [si]
    ;3
    mov di, 0
    mov ax, [di]
    

    [bx + si]和 [bx + di] 的用法一样

    [bx + si]表示一个内存单元,它的偏移地址为(bx) + (si)(即bx中的数值加上si中的数值)

    常用格式

    ;1
    mov ax, [bx + si]
    ;2
    mov ax, [bx][si]
    

    [bx + si + idata]和[bx + di + idata]的用法一样

    [bx + si + idata]表示一个内存单元,它的偏移地址为(bx) + (si) + idata(即bx中的值加上si中的值再加上idata)

    常用格式

    ;1
    mov ax, [bx + 200 + si]
    ;2
    mov ax, [200 + bx + si]
    ;3
    mov ax, 200[bx][si]
    ;4
    mov ax, [bx].200[si]
    ;5
    mov ax, [bx][si].200
    

    通过and和or转换大小写

    转换为大写

    and al, 11011111b

    转换为小写

    or al, 00100000b

    reg表示寄存器sreg表示段寄存器

    reg的集合包括:ax, bx, cx, dx, ah, al, bh, bl, ch, cl, dh, dl, sp, bp, si, di

    sreg的集合包括:ds, ss, cs, es'

  • 相关阅读:
    Asp.net 表单打印时的样式设置【原】
    Asp.net页面编辑时怎样获取隐藏列的值【原】
    C# Winform 捕获窗体的最小化和最大化事件、关闭按钮事件【整理】
    SQL 快速删除表数据并不生成日志的语句【搜藏】
    Asp.net 前段页面控件 filedset 对应的服务端控件【原】
    Asp.net 关于 HTTP403 – 访问错误 的原因及解决【原】
    Js对一个对象应用滤镜的几种方法【整理】
    Asp.net 查找不到动态创建的控件之解决办法【整理】
    C# windows service承載遠程對象
    自己写的一个日志记录类
  • 原文地址:https://www.cnblogs.com/songyaqi/p/11888051.html
Copyright © 2020-2023  润新知