• 8086汇编——课堂笔记整理2


    查表指令 XLAT

    MOV BX,OFFSET TABLE  ;table的有效地址(table的首地址,数组的首地址)存入BX

    MOV AL,4;要查表的第5个

    XLAT  ;隐含参数1.指定字节表的首地址存入BX

                            2.指定index存入AL

                            3.result存入AL

    IN OUT

    port : 32H,DX

    数据:AX,AL

    IN:external I/O device ->AL,AV,EAX

    根据端口号的长度判断

    IN AL,20H  ;20H是I/O port ID,port ID=8bit,将port ID 20H 设备中的数据->AL

    IN AX,48H  ;48H 8bit,将port ID 48H 设备中的数据->AX

    MOV DX,3FCH  ;3FCH是I/O port ID,port ID>8bit

    IN AX,DX  ;再将data从(DX)端口输入到AX中

    OUT:AL,AX,EAX->external I/O device

    OUT 32H,AX  ;将AX中数据->32H port

    MOV DX,400H  ;将port ID存入DX

    MOV AL,86H  ;将数据存入AL

    OUT DX,AL  ;将AL中的data输出到端口号=(DX)

    MOVSX  MOVZX

    MOVSX/MOVZX  reg16/32,reg/mem 8/16  ;MOVSX 有符号扩展  MOVZX 0扩展

    if (CL)=0ABH;

    MOVSX AX CL;(AX)=0FFABH

    MOVZX AX CL;(AX)=00ABH

    if (CL)=78H;

    MOVSX AX CL;(AX)=0078H

    MOVZX AX CL;(AX)=0078H

    ADD

    ADD DST,SRC 

    CF  无符号数 借位进位  OF 有符号数溢出  ZF 结果为0  PF  AF  SF

    reg,imm/reg/mem

    mem,reg/imm

    mem.mem

    imm,....

      dst,src 等长

    ADD ;半加

    ADC DST,SRC ;全加  CF

    INC DST  ;自加 无CF  地址自加,无进位,溢出循环

    INC MEM/REG   ;只对地址,无IMM

    e.g.1

    c:

    unsigned short b=7,c;

    a=b++;

    c=++b;

    assembly:

    a WORD ?

    b WORD 7

    c WORD ?

    MOV AX,b

    MOV a,AX ;不能 MOV a,b (MOV mem,mem)

    INC WORD PTR b (PTR 强制类型转换)

    INC WORD PTR b

    MOV AX,b

    MOV c,AX

    e.g.2

    32bit  DX  AX

     +      BX  CX

             DX   AX

    ADD AX,CX  ;半加产生进位存入CF

    ADC DX,BX  ;全加加上CF中产生的进位

    e.g.3

    INC AX

    ADC AX,0  ;防止进位没加

    e.g.4_1

    LEA BX,ARRAY ;将ARRAY的有效地址存入BX

    MOV AL,[BX]  ;寄存器间接寻址

    .......

    INC BX  ;地址自加,表示数组的下一个

    e.g.4_2

    MOV BX,0 ;数组的index=0

    MOV AL,ARRAY[BX]  ;寄存器相对寻址

    ......

    INC BX  ;数组的index++,数组的下一个

    e.g.5

    INC AX ;DX:AX中存的是32bit

    ADC DX,0

    错误 INC CF不变

    改为

    ADD AX,1

    ADC DX,0

    SUB  SBB

    SUB dst,src ;无CF

    dst=dst-src

    e.g.

    SUB AX,CX;减 被减数低8位,CF改变

    SBB DX,BX;减 被减数高8位,减CF

    DEC DST  ;自减,无CF

    NEG DST;取补 DST=0-DST,改变CF

    CMP DST,SRC ;DST-SRC,DST不改变

    unsigned:ZF=0 DST=SRC

                  CF=0 DST>=SRC

                  CF=1 DST<SRC

    signed:   ZF=0 DST=SRC

                 OF=SF DST>=SRC  结果是正数  SF:数的正负 -=1,+=0

                 OF<>SF DST<SRC  结果是负数  OF=overflow flag   SF=sign flag

  • 相关阅读:
    最短路径—Dijkstra算法和Floyd算法
    设计模式之工厂模式(Factory模式)
    接口继承与实现继承
    设计模式之工厂模式
    C++的四种强制转型形式:
    手写atoi、strcpy、strcat
    进程和线程关系及区别
    海量数据处理
    什么是死锁,简述死锁发生的四个必要条件,如何避免与预防死锁
    kolla-ansible 重新部署 ceph 遇到的问题
  • 原文地址:https://www.cnblogs.com/HackHer/p/5349293.html
Copyright © 2020-2023  润新知