汇编实验:寻址方式在数据访问中的应用

Posted csuchenzc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编实验:寻址方式在数据访问中的应用相关的知识,希望对你有一定的参考价值。

例子:

assume cs:codesg

datasg segment
    db 1975,1976,1977,1978,1979,1980,1981,1982,1983,1984,1985
    db 1986,1987,1988,1989,1990,1991,1992,1993,1994,1995
    ;表示21年的21个字符串

    dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514,345980,590827
    dd 803530,1183000,1843000,2759000,3753000,4649000,5937000
    ;21年总收入的21个dword数据

    dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
    dw 11542,14430,15257,17800
    ;表示21年公司雇员人数的21个数据
datasg ends

table segment
    db 21 dup (year summ ne ?? )
table ends

将data段中的数据按如下格式写入table中:

技术图片

 代码如下:

assume cs:codesg

datasg segment
    db 1975,1976,1977,1978,1979,1980,1981,1982,1983,1984,1985
    db 1986,1987,1988,1989,1990,1991,1992,1993,1994,1995
    ;表示21年的21个字符串

    dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514,345980,590827
    dd 803530,1183000,1843000,2759000,3753000,4649000,5937000
    ;21年总收入的21个dword数据

    dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
    dw 11542,14430,15257,17800
    ;表示21年公司雇员人数的21个数据
datasg ends

table segment
    db 21 dup (year summ ne ?? )
table ends

stacksg segment
    db 16 dup (0)
stacksg ends

codesg segment
start:    mov ax,datasg
        mov ds,ax
        mov ax,table
        mov es,ax
        mov ax,stacksg

        mov ss,ax
        mov sp,16
        ;栈用来储存CX中的数据来进行双重循环
        mov cx,21
        mov bx,0
        ;BX储存table段中每行的内存单元,0<=(BX)<=F,所以每次循环BX要清0
        mov di,0
        ;DI用来访问储存公司收入的数据段
        mov si,0
        ;SI用来访问储存公司员工数量的数据段
        mov bp,0
        ;BP用来访问储存公司年份的数据段

    s0:    push cx
        mov cx,4
        mov bx,0

    s1:    mov al,ds:[bp]
        mov es:[bx],al
        inc bp
        inc bx
        loop s1
        ;第一次循环完毕BP会指向下一个年份的首地址,BX会指向table:04H,下面将空格输入此单元格

        mov al, 
        mov es:[bx],al
        inc bx

        mov ax,ds:[si+84]
        ;21个年份字符串,每个年份有4个数字字符,共占84Byte,si = 0时ds:[si+84]指向第一年公司收入
        mov es:[bx],ax
        add bx,2
        add si,2
        mov ax,ds:[si+84]
        mov es:[bx],ax
        add si,2
        add bx,2
        ;此代码段结束时si += 4,ds:[si+84]指向下一年收入

        mov al, 
        mov es:[bx],al
        inc bx

        mov ax,ds:[di+168]
        mov es:[bx],ax
        add di,2
        add bx,2

        mov al, 
        mov es:[bx],al
        
        mov ax,es:[5]
        mov dx,es:[7]
        div word ptr es:[0ah]
        ;注意一下被除数32位除法的规则
        mov es:[0dh],ax

        mov al, 

        mov es:[bx],al
        mov ax,es
        inc ax
        mov es,ax
        ;在第一次循环结束时给es自增1,使其指向table:10H,在以后的循环同理
        ;让其指向“下一行”

        pop cx
        loop s0

        mov ax,4c00h
        int 21h
codesg ends
end start

 运行结果:

技术图片

以上是关于汇编实验:寻址方式在数据访问中的应用的主要内容,如果未能解决你的问题,请参考以下文章

汇编试验七:寻址方式在结构化数据访问中的应用

[汇编语言]实验:应用更灵活的寻址方式来定位内存地址

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

50行代码实现《汇编语言》王爽 实验七

[汇编语言]实验:更灵活的寻址方式 -应用si和di

汇编实验9