美文网首页
[汇编语言] 实验7 寻址方式在结构化数据访问中的应用

[汇编语言] 实验7 寻址方式在结构化数据访问中的应用

作者: 耿杰 | 来源:发表于2019-07-18 21:38 被阅读0次
数据 把数据填充到table表中
assume cs:codesg ds:data

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'
   ; 以上是表示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,200,476,778,1001,1442,2258,2793,4037,5635,8226
   dw 11542,14430,15257,17800
   ; 以上是表示21年公户雇员人数的21个word型数据
   
data ends

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

code segment
     start:
  
code ends
  
end start

答案

assume cs:codesg ds:data ss:stack

data segment
   db '1975','2176','1977','1978','1979','1980','1981','1982','1983'
   db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
   db '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,200,476,778,1001,1442,2258,2793,4037,5635,8226
   dw 11542,14430,15257,17800
  ; 以上是表示21年公户雇员人数的21个word型数据
   
data ends

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

stack segment
    db 0
stack ends

code segment
     start: 
        
        ; 指定data段的地址
        mov ax, data
        mov ds, ax
        
        ; 设置循环的次数 
        mov cx, 21
        
        ; 初始化寻址寄存器
        mov si, 0
        mov di, 0
        mov bx, 0   
                     
        s: 
                
            ; 设置table段的内存地址
            mov ax, table
            mov es, ax
                
            ; 读取年份。一个年份数据总共占用4个字节,ax寄存器最多能够读取2个字节,所以要读 si 和 [si+2]。
            mov ax, ds:[si]
            mov es:[bx], ax 
            mov ax, [si+2]
            mov es:[bx+2], ax
                   
            ; 读取收入。一个收入数字占用2个字,也就是4个字节,所以不能用ax来保存。所以只能用 dx 和 ax 两个寄存器联合存放。dx 存放高地址,ax 存放低地址。
            mov ax, [si + 84]
            mov es:[bx+5], ax
            mov dx, [si + 84 + 2]
            mov es:[bx+7], dx  
            
            ; 把当前ax的值保存在栈中
            push ax
            
            ; 把雇员数保存在table表中第11个字节
            mov ax, [di + 84 + 84]
            mov es:[bx+10], ax 
            
           ; 把栈顶的值还原给ax中
            pop ax
           
            ; 由于被除数是32位,所以除数要16位
            div word ptr es:[bx+10]
                         
            ; 由于被除数是32位,ax的值为商,赋值table表中的对应的位置                
            mov es:[bx+13], ax
            
           ; 雇员每次循环要添加2个字节
            add di, 2
            ; table中每一行占用16个字节            
            add bx, 16
            ; 年份和收入每次循环要添加4个字节
            add si, 4 
        
        loop s  
        
   
        mov ax, 4c00h
        int 21h 
         
code ends
end start

结果图

071E:0000 - 071E:0070 071E:0080 - 071E:00F0 071E:0100 - 071E:0140

相关文章

网友评论

      本文标题:[汇编语言] 实验7 寻址方式在结构化数据访问中的应用

      本文链接:https://www.haomeiwen.com/subject/ppollctx.html