王爽《汇编语言》实验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