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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值