• 【汇编语言-王爽】第八章:数据处理的两个基本问题


    知识点

    (一)地址

    • 描述性符号:reg用来表示寄存器,sreg用来表示段寄存器。
    • 在8086CPU中,只有bx、si、di和bp这4个寄存器可以用在“[…]”中来进行内存单元的寻址。
    • bx的默认段地址为ds,[]中可以是bx+di+idata,或者bx+si+idata。
    • bp的默认段地址为ss,[]中可以是bp+di+idata,或者bp+si+idata。
    • 表达数据的位置:立即数(idata)、寄存器、段地址+偏移地址。
    • 常用的表达方式还包括:bx.10h[si]等。
    • 如何指明要处理的数据有多长:
      • 通过寄存器名,比如ax, al。
      • 用操作符byte ptr 或者word ptr指明内存单元的长度。
      • 其他方法:比如push指令只进行字操作。

    (二)除法 div

    • 除数为8位的除法。被除数则为16位,默认在AX中存放。AL存储除法操作的商,AH存储除法操作的余数。
    • 除数为16位的除法。被除数则为32位,在DX和AX中存放,DX存放高16位,AX存放低16位。AX存储除法操作的商,DX存储除法操作的余数。

    (三)其他

    • db定义字节型数据;dw定义字型数据;dd定义双字型数据。
    • dup是一个操作符,配合db、dw、dd等数据定义伪指令配合使用,用来进行数据的重复。例如:db 重复次数 dup (重复的字节型数据),即db 200 dup (0)。

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

    代码

    assume cs:codesg
    
    data segment
            db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
            db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
            db '1993','1994','1995'
    
            dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
            dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
    
            dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
            dw 11542,14430,15257,17800
    data ends
    
    table segment
            db 21 dup ('year summ ne ?? ')
    table ends
    
    
    codesg segment
      start:mov ax,data
            mov ds,ax
            mov bx,0
            mov si,84
            mov di,168
    
            mov ax,table
            mov ss,ax
            mov sp,0
            mov bp,0
    
            mov cx,21
    
          s:mov ax,[bx]
            mov dx,[bx+2]
            mov [bp].[0], ax
            mov [bp].[2], dx
    
            mov ax,[si]
            mov dx,[si+2]
            mov [bp].[5], ax
            mov [bp].[7], dx
    
            div word ptr [di]
            mov [bp].[13], ax
    
            mov ax,[di]
            mov [bp].[10], ax
     
    
            add bx,4h
            add si,4h
            add di,2h
            add bp,10h
    
            loop s
    
            mov ax,4c00h
            int 21h
    
    
    codesg ends
    end start
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
  • 相关阅读:
    [Java] Lock(锁)的tryLock失败是否需要unlock?
    FFplay文档解读-23-音频过滤器八
    x-cmd ai | x openai - 用于发送 openai API 请求,以及与 ChatGPT 对话
    中低压MOSFET 2N7002T 60V 300mA 双N通道 SOT-523封装
    【Solidity】Solidity中的基本数据类型和复合数据类型
    docker portainer部署
    爬虫逆向实战(32)-某号店登录(RSA、补环境、混淆)
    归并排序详解(递归+非递归)
    三网话费接口API文档
    "高绩效"指南
  • 原文地址:https://blog.csdn.net/weixin_42294274/article/details/133979293