zoukankan      html  css  js  c++  java
  • 王爽《汇编语言》实验7

    因为实验7中的数据太多,我就对其缩减了一些。

     因为其中用到很多的寄存器,但是每个寄存器都有限制规则,所以要精心分配寄存器。

    最先分配的是两个段寄存器,data用ds存放, table用es存放。

    然后要确定循环使用的寄存器cx;

    然后要精心分配指向table和data地址的寄存器,由于能够指向地址的寄存器只有bx, si di, bp,选其中三个进行地址的指定,我的选择是:

                       一个指向table地址的寄存器bp,一个指向年份和收入的寄存器di,一个指向雇员的寄存器si;

    最后确定使用div命令所需要的ax和dx。

    分配好寄存器后就是进行编码工作了。

    编码过程中发现,原来不能使用这样的命令:mov  地址, 地址

    所以只能用一个临时的寄存器做转换,使得一个命令用了两个指令来实现。

    assume cs:code
    
    data segment
    	db '1975','1976','1977','1978','1979','1980','1981','1982'
    	dd 16,22,100,1000,345678,435576,1234567,7652351
    	dw 3,234,45,56,435,565,4546,4354
    data ends
    
    table segment
    	db 8 dup ('year summ ne ?? ')
    table ends
    
    code segment
    start:	mov ax, data
    		mov ds, ax
    		
    		mov ax, table
    		mov es, ax
    		
    		mov di, 0
    		mov si, 64
    		mov bp, 0
    		
    		mov cx, 8
    		
    s:		mov ax, ds:[di]
    		mov es:[bp], ax
    		mov ax, ds:[di+2]
    		mov es:[bp+2], ax
    		
    		mov byte ptr es:[bp+4], 32
    		
    		mov ax, ds:[di+32]
    		mov es:[bp+5], ax
    		mov ax, ds:[di+32+2]
    		mov es:[bp+7], ax
    		
    		mov byte ptr es:[bp+9], 32
    		
    		mov ax, ds:[si]
    		mov es:[bp+10], ax
    		
    		mov byte ptr es:[bp+12], 32
    		
    		mov dx, es:[bp+7]
    		mov ax, es:[bp+5]
    		div word ptr es:[bp+10]
    		
    		mov es:[bp+13], ax
    		
    		mov byte ptr es:[bp+15], 32
    		
    		add di, 4
    		add si, 2
    		add bp, 16
    		
    		loop s
    		
    		mov ax, 4c00h
    		int 21h
    code ends
    end start
    
  • 相关阅读:
    NDK中使用pthread多线程中自己写的一个BUG
    Android Native crash日志分析
    Android细笔记--DataStorage
    求二叉树第n层节点数
    对YUV数据进行裁剪
    Android XML中引用自定义内部类view的四个why
    Android细笔记--ContentProvider
    Android Log Tag含义
    189-RotaeArray
    二分查找法
  • 原文地址:https://www.cnblogs.com/ay27/p/3043622.html
Copyright © 2011-2022 走看看