汇编语言--学习笔记

寄存器

reg

    ·AX BX CX DX:可分为H-L(高位-低位)共16位
    ·BX      可寻址,默认段地址DS 
    ·cx:    通常用作loop指令循环次数
    ·SI DI: 寄存器(不可分为H-L位,共16位),可寻址
    ·BP      可寻址,默认段地址SS
    ·SP
    
    不可用[bx+bp]/[si+di]寻址

sreg

段寄存器:
    ·CS:IP    cpu当前读取指令地址:偏移地址
    ·SS:SP    栈顶段地址:偏移地址
    ·DS:[..]  访问数据段地址:偏移地址  (DS存放程序内存区段地址,即PSP的段地址SA)
    ·ES       段寄存器

flag

    zf(6): 相关指令的结果是否(1/0)为零
    pf(2):相关指令执行后的结果所有bit位中1的个数是否(1/0)为偶数
    sf(7):相关指令执行后的结果是否(1/0)为负
    cf(0):记录相关指令的进位值和借位值
    of(11):是否(1/0)发生溢出
    df(10):

基于flag的条件转移指令

    ·je(equal)      等于则转移      zf=1
    ·jne(not equal) 不等于则转移    zf=0
    ·jb(below)      低于则转移      cf=1
    ·jnb(not below) 不低于则转移    cf=0
    ·ja(above)      高于则转移      cf=0且zf=0
    ·jna(not above) 不高于则转移    cf=1或zf=1
    ·jnc			无进位或借位	  cf=0

基本指令

    ·mov/sub ax/al/ah,n/ax
    ·add/sub ax,n/ax
    ·段间转移
           jmp far ptr 标号   修改为标号的段地址与偏移地址
           jmp dword ptr 内存单元地址(两个字)  高地址字:段地址  低地址字:偏移地址
    ·段内转移
           jmp short 标号     八位位移(-128~127)
           jmp near ptr 标号  十六位位移(-32768~32767)
           jmp word ptr 内存单元地址
    ·jcxz:if((cx)==0)jmp short 标号
    ·ret:pop ip (近转移)    retf:pop ip;pop cs (远转移)
    ·call  
           call 标号:push ip;jmp near ptr 标号
           call far ptr 标号:push cs;push ip;jmp far ptr 标号
           call 16位reg:push ip;jmp 16位reg
           call word ptr 内存单元地址:push ip;jmp word ptr 内存单元地址
           call dword ptr 内存单元地址:push cs;push ip;jmp dword ptr 内存单元地址
    ·mul 乘法
          mul reg/mul 内存单元
          八位乘法:(AL)*reg/内存单元,结果存放在AX中
          十六位乘法:(AX)*16位reg/内存单元,结果存放在DX(高)和AX(低)中  
    ·push/pop
    ·inc ax : ax自增
    ·dec ax : ax自减
    ·loop s:循环s地址中的指令cx次
        {       mov cx,idata
            s:
                循环体
                loop s
        }
    ·and:逻辑与指令
    ·or:逻辑或指令
    ·ptr:指明数据尺寸 word/byte ptr
    ·div:除数
            AX(16)/8位数据=AL(商)AH(余)     
            DX(高16位)AX(低16位)/16位数据=AX(商)DX(余)
    ·dup:   db idata dup (idata、idata、idata)表示重复,与db/dw/dd配合使用
    ·offset:取得标号的偏移地址
    ·nop:空指令
    ·adc:带进位加法指令
    ·sbb:带借位减法指令
    ·cmp 1,2 比较指令,做减法运算

Dosbox中Debug的常用指令

    a (Assemble) 逐行汇编 a [address]

    c (Compare) 比较两内存块 c range address

    d (Dump) 内存16进制显示 d [address]或 d [range]

    e (Enter) 修改内存字节 e address [list]

    f (fin) 预置一段内存 f range list

    g (Go) 执行程序 g [=address][address...]

    h (Hexavithmetic) 制算术运算 h value value

    i (Input) 从指定端口地址输入 i pataddress

    l (Load) 读盘 l [address [driver seetor>

    m (Move) 内存块传送 m range address

    n (Name) 置文件名  n filespec [filespec...]

    o (Output) 从指定端口地址输出 o portadress byte

    p 执行循环、重复的字符串指令、软件中断或子例程。

    q (Quit) 结束  q

    r (Register) 显示和修改寄存器 r [register name]

    s (Search) 查找字节串  s range list

    t (Trace) 跟踪执行  t [=address] [value]

    u (Unassemble) 反汇编 u [address ]或range

    w (Write) 存盘  w [address[driver sector secnum>

汇编语言--学习笔记
http://example.com/2021/01/14/汇编语言-学习笔记/
作者
Magnesium
发布于
2021年1月14日
许可协议