王爽汇编实验(七)

 

 王爽汇编语言实验七 

 

 1 assume cs:codesg
 2 data segment
 3 db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
 4 db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
 5 db '1993','1994','1995'
 6 ;以上是表示21年的字符串 4 * 21 = 84
 7 
 8 dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
 9 dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
10 ;以上是表示21年公司总收入的dword型数据 4 * 21 = 84
11 
12 dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
13 dw 11542,14430,15257,17800
14 ;以上是表示21年公司雇员人数的21个word型数据 2 * 21 = 42
15 data ends
16 
17 table segment
18 db 21 dup ('year summ ne ?? ') ; 'year summ ne ?? ' 刚好16个字节
19 table ends

 

 1 assume cs:code,ds:data,es:table
 2 
 3 data segment
 4 db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
 5 db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
 6 db '1993','1994','1995'
 7 ;以上是表示21年的字符串 4 * 21 = 84
 8 
 9 dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
10 dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
11 ;以上是表示21年公司总收入的dword型数据 4 * 21 = 84
12 
13 dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
14 dw 11542,14430,15257,17800
15 ;以上是表示21年公司雇员人数的21个word型数据 2 * 21 = 42
16 data ends
17 
18 table segment
19 db 21 dup ('year summ ne ?? ') ; 'year summ ne ?? ' 刚好16个字


编程,将data段中的数据按如下格式写入到table段中,并计算21年中的人均收入(取整),结果也按照下面的格式保存在table段中


 

别人的版本。感觉比我简略。

assume ds:data, es:table, cs:code 

 

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,220,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:

      ;初始化2个数据段,将ds指向data,es指向table

      mov ax,data

      mov ds,ax

      mov ax,table

      mov es,ax

      ;初始化偏址寄存器变量

      mov bx,0

      mov si,0

      mov di,0

      ;共21行,循环21次,初始化计数器

      mov cx,21  

  s: 

      ;写入年份

      mov ax,0[bx]            ;如看着别扭,改成mov ax, [bx+0] 

      mov es:0[si],ax

      mov ax,2[bx]

      mov es:2[si],ax

      ;写入空格

      mov al,20H

      mov es:4[si],al

      ;写入收入

      mov ax,84[bx]

      mov es:5[si],ax

      mov ax,86[bx]

      mov es:7[si],ax

      ;写入空格

      mov al,20H

      mov es:9[si],al

      ;雇员数

      mov ax,168[di]

      mov es:10[si],ax

      ;写入空格

      mov al,20H

      mov es:12[si],al

      ;人均收入,高16位送入dx,低16位送入ax

      mov ax,[bx+84]

      mov dx,[bx+86]

      ;用个bp变量存储除数,为以后实验考虑

      mov bp,[di+168]

      div bp                  ;16位除法指令

      mov es:13[si],ax        ;将商的结果(ax)写入table段中

      ;写入空格

      mov al,20H

      mov es:15[si],al

      ;bx、si、di变量的递增

      add bx,4                ;年份和总收入都是双字单元,故bx的递增量是4

      add si,16               ;table中每行是16个字节,偏移量为16

      add di,2                ;人数是字单元,故di的递增量是2

      loop s

     

      mov ax,4c00H

      int 21H

code ends

end start

 

 

 

我的代码

 

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'
;以上是表示21年的字符串 4 * 21 = 84

dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
;以上是表示21年公司总收入的dword型数据 4 * 21 = 84

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个word型数据 2 * 21 = 42
data ends

table segment
db 21 dup ('year summ ne ?? ') ; 'year summ ne ?? ' 刚好16个字节
table ends

stack segment

dw 0,0

stack ends

codesg segment

start:

mov ax,data

mov ds,ax

mov ax,table

mov es,ax

mov ax,stack

mov ss,ax

mov sp,4

mov cx,21
mov bx,0

s1:

push cx

mov cx,4

mov bx,0

s2:
mov ax,[bx][si]

mov es:0[si],ax
inc si

loop s2

add si,2

add bx,79

mov ax,[bx+si]

mov es:[si],ax

mov dx,[bx].2[si]

mov es:2[si],dx

add si,4

add bx,80

push ax

mov ax,[bx][si]

mov es:0[si],ax
pop ax

div word ptr es:0[si]

add si,2

add bx,40

mov es:0[si],dx

add si,2

pop cx

loop s1

mov ax,4c00H

int 21H

codesg ends
end start

 

 

 

 可以一步执行到位。

截图都是一样的。这道问题答案很多,我的写的复杂了点,不容易看懂。

posted @ 2019-11-17 18:12  世界を変える御宅族  阅读(731)  评论(0编辑  收藏  举报