zoukankan      html  css  js  c++  java
  • 王爽汇编实验(七)

     王爽汇编语言实验七 

     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

     

     

     可以一步执行到位。

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

  • 相关阅读:
    python 学习笔记7(类/对象的属性;特性,__getattr__)
    linux 误删文件恢复
    python 学习笔记6(数据库 sqlite)
    hive 函数 Cube
    边标志法填充多边形
    tolua#代码简要分析
    CocoaAsyncSocket + Protobuf 处理粘包和拆包问题
    【设计模式】适配器模式
    【设计模式】外观模式
    【操作系统】进程管理(二)
  • 原文地址:https://www.cnblogs.com/otakus/p/11876130.html
Copyright © 2011-2022 走看看