• reg:寄存器
    • sreg:段寄存器
      • ds ss cs ds
    • 16位可以用在[]中寻址的寄存器
      • bx、bp、si、di
      • [bx\bp+si\di]
    • bp
      • 只要[]中使用寄存器bp,而指令中没有显示的给出段地址,段地址默认在ss中
    • 汇编语言中数据位置
      • CPU的指令缓冲器:立即数
      • CPU:寄存器
      • 内存:段地址和偏移地址给出
    • 指明访问单元的类型
      • mov word ptr ds:[0],1 ; 字型
      • mov byte ptr ds:[0],1 ; 字节型
      • push、pop:只对字型数据进行操作(sp+/-2)
    • 寻址方式和数据结构挂钩
      • mov byte ptr [bx].10h[si],’V’ ; dec.cp[i]=’V’
      • [bx+si+idata]方便结构化数据处理
        • bx:整个结构体
        • idata:定义结构体中的某一个数据项
        • si:数组项中的每个元素
    • div

      • 除法指令
      • 除数:放寄存器或内存单元中
      • 被除数:ax(16)或dx+ax(32)
      • 除数8位,被除数16位,结果8位(商AL 余数AH)
      • 除数16位,被除数32位,结果16位(商AX 余数DX)
      • 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(>65535)/100(<255)
        • 100001要在32位寄存器中存放,虽然100<255可以存放在8位寄存器,但是要和被除数搭配,只能在16位寄存器中存放
          1. mov dx,1H
          2. mov ax,86A1H
          3. mov bx,100
          4. div bx
    • 数据类型

      • db:字节型
      • dw:字型
      • dd:双子型
    • 例题:用div计算data段中中的第一个数据处以第二个数据后的结果,商放到第三个数据的存储单元中。 ```cpp assume ds:data,cs:code data segment dd 100001 dw 100 dw 0
      data ends

    code segment start:mov ax,data mov ds,ax mov bx,0 mov dx,ds:[bx+2] mov ax,ds:[bx] div word ptr ds:[bx+4] mov ds:[bx+6],ax

    code ends end start

    1. - dup
    2. - 编译器识别处理的符号,进行数据的重复
    3. - db 3 dup(0) = db 0,0,0
    4. - db 3 dup(0,1,2) = db 0,1,2,0,1,2,0,1,2
    5. - db()里是重复的字节型数据
    6. - dw()里是重复的字型数据
    7. - dd()里是重复的双字型数据
    8. - 实验7
    9. ```cpp
    10. assume cs:codesg,ds:datasg,es:table
    11. datasg segment
    12. db '1975','1976' ;地址 0~2*4-1H(一个字符一个byte) 0-53H
    13. dd 16,22 ;地址 2*4H~2*4+3H 54H-0A7H
    14. dw 3,7 ;地址 2*4+4H~2*4+11H 0A8H-0D1H
    15. datasg ends
    16. table segment
    17. db 2 dup ('year summ ne ??')
    18. table ends
    19. codesg segment
    20. start: mov ax,datasg
    21. mov ds,ax
    22. mov ax,table
    23. mov es,ax
    24. mov bx,0
    25. mov si,0
    26. mov di,0
    27. mov cx,2
    28. s:mov al,[bx]
    29. mov es:[di],al
    30. mov al,[bx+1]
    31. mov es:[di+1],al
    32. mov al,[bx+2]
    33. mov es:[di+2],al
    34. mov al,[bx+3]
    35. mov es:[di+3],al
    36. mov ax,8h[bx]
    37. mov dx,10h[bx]
    38. mov es:[di+5],ax ;低位
    39. mov es:[di+7],dx ;高位
    40. mov ax,12h[si]
    41. mov es:[di+0Ah],ax ;高位
    42. mov ax,8h[bx]
    43. mov dx,10h[bx]
    44. div word ptr ds:12h[si]
    45. mov es:[di+0dh],ax
    46. add bx,4 ;double word
    47. add si,2 ;word
    48. add di,16
    49. loop s
    50. codesg ends