• 汇编语言(王爽)学习记录_第八章


    第八章 数据处理的两个基本问题

    定义描述性符号:reg集合表示:ax,bx,cx,dx,ah,al,bh,bl,ch,cl,dh,dl,sp,bp,si,di    sreg集合表示:ds,ss,cs,es

    bx、si、di和bp

    (1)8086CPU中只有这四个可用在“[   ]”:mov ax,[bx] 、 mov ax,[bx+di] 、mov ax,[bx+si] 、mov ax,[bp] 、mov ax,[bp+si] 、mov ax,[bx+di]

        错误用法:mov ax,[cx] 、 mov ax,[ax] 、mov ax,[dx] 、 mov ax,[ds]

    (2)在“[  ]”中这四个可以单独出现也可以以这4中种组合:bx和si,bx和di,bp和si,bp和di

         例:  mov ax,[bx]

          mov ax,[di]

          mov ax,[si]

          mov ax,[bp]

          mov ax,[bx+si]

          mov ax,[bx+di]

          mov ax,[bp+si]

          mov ax,[bp+di]

          mov ax,[bx+si+idata]

          mov ax,[bx+di+idata]

          mov ax,[bp+si+idata]

          mov ax,[bp+di+bp]

    (3)在”[  ] “中使用bp,而没有显性给出段地址则段地址默认在ss中

        例:   mov ax,[bp]

             mov ax,[bp+idata]

             mov ax,[bp+si]

             mov ax,[bp+si+idata]

    汇编语言中数据位置的表达

    (1)立即数(idata)  直接在机器指令中的数据(执行前在CPU的指令缓存中)称为立即数,例如:mov ax,1、add bx,2000h、or bx,00020000b、mov al,'a'

    (2)寄存器  数据在寄存器中,例:mov ax,bx、mov ds,ax、push bx

    (3)段地址(SA)和偏移地址(EA)  要处理的数据在内存中用[EA]格式给出EA,SA在某个段寄存器中。例:mov ax,[0](特殊可以这样写)、mov ax,[di]、mov ax,[bx+8](前三段寄存器都在ds中)、mov ax,[bp](段寄存器在ss中)、也可以显性给出:mov ax,ds:[bp]、mov ax,es:[bx]

    寻址方式

     指令要处理的数据有多长

    8086CPU种机器指令要指明数据处理的是字还是字节有以下3种方式:

    (1)通过寄存器指明:mov ax,1、mov bx,ds:[0]、mov al,1、 mov al,bl前两者是对字型数据操作,后两者是对字节型数据操作。

    (2)用操作符X ptr指明内存单元的长度X可以是word、byte例如:mov word ptr ds:[0],1、mov word ptr [bx]、add byte ptr [bx],2、inc byte ptr ds:[0]

    (3)其他例如出入栈,push [1000H]不能指明访问单元类型,只能对字操作。

    div指令

    div指令做除法时要看除数的位数:

    除数 8位 16位
    被除数 默认AX中 DX(高16位)和AX(低16位)中
    AL AX
    余数 AH DX

    格式:

    div reg

    div 内存单元

    例:

    div byte ptr ds:[0] 表示(al)=(ax)/((ds)*16+0)的商、(ah)=(ax)/((ds)*16+0)的余数

    div word ptr es:[0] 表示(ax)=[(dx)*10000H+(ax)]/((es)*16+0)的商、(dx)=[(dx)*10000H+(ax)]/((es)*16+0)的商

    编程:100001/100

    mov dx,1

    mov ax,86a1h

    mov bx,100

    div bx

     伪指令dd

    与dw和db一样定义数据,dd定义的是32位数据。

    data sagement

    db 1

    dw 1

    dd 1

    data ends

    第一个数据01H,在data:0处占1个字节

    第二个数据0001H,在data:1处占一个

    第三个数据00000001H,在data,3处占两个

    dup

    与dd,dw,db一起使用,用于进行数据的重复。

    例如:db 3 dup(0) 相当于db 0,0,0

       db 3 dup(0,1,2) 相当于db 0,1,2,0,1,2,0,1,2

     

     

  • 相关阅读:
    Load Balancing 折半枚举大法好啊
    Big String 块状数组(或者说平方分割)
    K-th Number 线段树(归并树)+二分查找
    D. Powerful array 莫队算法或者说块状数组 其实都是有点优化的暴力
    CSU OJ PID=1514: Packs 超大背包问题,折半枚举+二分查找。
    运行时Runtime的API
    UIView的API
    UIControl的API
    UIScrollView的API
    使用KVO键值监听
  • 原文地址:https://www.cnblogs.com/Te-mgl/p/14117833.html
Copyright © 2020-2023  润新知