自学王爽老师《汇编语言》笔记——第8章 数据处理两个基本问题

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

为了描述的简洁,约定使用reg来表示一个寄存器,用sreg来表示一个段寄存器。

  • reg集合:ax, bx, cx, dx, ah, al, bh, bl, ch, cl, dh, dl, sp, bp, si, di;
  • sreg集合:ds, ss, cs, es。

8.1 bx、si、di和bp

  • 在8086CPU中,只有这四个寄存器可以用在 “[...]” 中来进行内存单元的寻址。
  • 这四种指令若组合出现只能有以下四种组合:
    1. bx 和 si;
    2. bx 和 di;
    3. bp 和 si;
    4. bp 和 di。
  • 只要在 [...] 中使用寄存器 bp,而指令中没有显性给出段地址,段地址就默认在 ss 中。

8.2 机器指令处理的数据在什么地方

  • 绝大部分机器指令都是进行数据处理的指令。
  • 处理大致可以分为三类:读取、写入、运算
  • 从机器指令层面讲,并不关心数据的值是多少,而关心指令执行前一刻,他将要处理的数据所在的位置。
  • 指令执行前数据可以在三个地方:CPU内部、内存、端口

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

汇编语言用三个概念来表达数据的位置:

  1. 立即数(idata):直接包含在机器指令中的数据。
  2. 寄存器
  3. 段地址(SA)和偏移地址(EA)

8.4 寻址方式

8086CPU的寻址方式总结:

图片说明

8.5 指令要处理的数据有多长

指令如何判断进行的是字操作还是字节操作?

  1. 通过寄存器名指明要处理的数据尺寸。
  2. 在没有寄存器名情况下,用操作符 X ptr 指明内存单元的长度,X 的可选值为 wordbyte
    • 例如:mov byte ptr ds:[0],1
  3. 有些指令默认了访问的是字单元还是字节单元。
    • 例如:push 指令只进行字操作。

8.6 寻址方式的综合应用

  • 8086CPU提供了 [bx + si + idata] 的寻址方式为结构化数据的处理提供了方便。
  • 用 bx 定位结构体,用 idata 定位结构体中的某一个数据项,用 si 定位数据项中的每个元素。

8.7 div指令

div是除法指令,使用时应注意以下问题:

  • 除数:有8位和16位两种,在一个reg或内存单元中。
  • 被除数:默认存放在AX 或 DX和AX中。
    • 除数8位,被除数16位:在AX中存放
    • 除数16位,被除数32位,在DX和AX中存放,其中DX存放高16位
  • 结果:如果除数为8位,则AL存储除法操作的商,AH存储除法操作的余数;如果除数为16位,则AX存储除法操作的商,DX存储除法操作的余数。
  • 格式如下:
    • div reg
    • div 内存单元
除数位数 被除数 除数 余数
8位 AX reg或内存单元 AL AH
16位 DX(高16位)AX(低16位) reg或内存单元 AX DX

8.8 伪指令 dd

dd 是用来定义dword(double word)型数据的。

8.9 dup

  • dup 是一个操作符,在汇编语言中同 db、dw、dd 等一样,也是由编译器识别处理的符号。
  • 它和 db、dw、dd 等数据定义伪指令配合使用,用来进行数据的重复。
  • 用法:
    • db 重复的次数 dup (重复的字节型数据)
    • dw 重复的次数 dup (重复的字型数据)
    • dd 重复的次数 dup (重复的双字型数据)

实验7 寻址方式在结构化数据访问中的应用

assume cs:codesg, ss:stacksg

datasg segment
    db '1975', '1976', '1977', '1978', '1979', '1980', '1981', '1982'
    db '1983', '1984', '1985', '1986', '1987', '1988', '1989', '1990'
    db '1991', '1992', '1993', '1994', '1995'
    ;以上是表示21年的21个字符串
    dd 16, 22, 382, 1356, 2390, 8000, 16000, 24486, 50065, 97479, 140417, 197514
    dd 345980, 590827, 803530, 1183000, 1843000, 2759000, 3753000, 4649000, 5937000
    ;以上是表示21年公司总收入的21个dword型数据
    dw 3, 7, 9, 13, 28, 38, 130, 220, 476, 778, 1001, 1442
    dw 2258, 2793, 4037, 5635, 8226, 11542, 14430, 15257, 17800
    ;以上是表示21年公司雇员人数的21个word型数据
datasg ends

table segment
               ;0123456789ABCDEF
    db 21 dup ('year summ ne ?? ')
table ends

stacksg segment
    db 16 dup(0)
stacksg ends

codesg segment
start:  mov ax,stacksg
        mov ss,ax
        mov sp,16

        mov ax,datasg
        mov ds,ax

        mov ax,table
        mov es,ax

        mov si,0    ;ds:[si]
        mov di,84   ;ds:[di]
        mov bx,168  ;ds:[bx]
        mov bp,0    ;es:[bp]

        mov cx,21
fiTab:  push ds:[si]
        pop es:[bp]
        push ds:[si + 2]
        pop es:[bp + 2]

        mov ax,ds:[di]
        mov dx,ds:[di + 2]
        mov es:[bp + 5],ax
        mov es:[bp + 7],dx

        push ds:[bx]
        pop es:[bp + 0ah]

        div word ptr ds:[bx]

        mov es:[bp + 0dh],ax

        add si,4
        add di,4
        add bx,2
        add bp,16
        loop fiTab

        mov ax,4c00h
        int 21h
codesg ends

end start

实现了统计 Power idea 公司从1975年起21年的人均收入。

#汇编语言##自学##读书笔记#
全部评论
感谢王爽老师分享的《汇编语言》笔记
点赞 回复 分享
发布于 2022-08-27 12:25 河南

相关推荐

10-13 17:47
门头沟学院 Java
wulala.god:图一那个善我面过,老板网上找的题库面的
点赞 评论 收藏
分享
头像
11-09 12:17
清华大学 C++
out11Man:小丑罢了,不用理会
点赞 评论 收藏
分享
2 收藏 评论
分享
牛客网
牛客企业服务