第八章(笔记)

能在[····]中进行内存单元的寻址的寄存器只有4个, 分别是bx , si , di , bp

其中bx , bp 是基址,bx对应的段地址是ds,bp对应的段地址是ss

         si , di 是变址,单独使用时段地址是ds,组合使用段地址是跟随组合的基址对应的段地址

[·····]中进行内存单元寻址汇总:

       [si]   [di]   [bx]   [bp]   [常量] 

       [si+常量]   [di+常量]   [bx+常量]   [bp+常量]

       [bx+si]   [bx+di]   [bp+si]   [bp+di]

       [bx+si+常量]   [bx+di+常量]   [bp+si+常量]   [bp+di+常量]

汇编还提供了更为贴切的书写方式:如([bx].常量 、[bx].常量[si])


在需要直接使用内存单元进行操作时,必须知道操作的内存长度。因此汇编提供了X ptr 这操作符代替所要操作内存的长度,X可以是word或type

(例子:mov word ptr [bx] , '12')


这章提供了一个除法指令 div:

除数有两种,8位和16位

如果除数为8位,被除数则为16位,默认存放在AX中,得到的结果商存放在AL,余存放在AH。如果除数为16位,被除数则为32位,那高16位存放在DX,低16位存放在AX,得到的结果商存放在AX,余存放在DX


这章提供了一个伪指令 dd:

dd是用来定义dword型数据(dword 是 double word)

这章提供了一个操作符 dup:

这操作符与数据定义伪指令配合使用,用于进行数据的重复。

(例如:db 3 dup (0) == db 0,0,0)


结合上几章所学的知识总结练习:

将给出的数据进行表格型排列,并求出人均工资

assume ds:data, cs:code, ss:table
data segment
         db '1975','1976','1977','1978','1979','1980'
         db '1981','1982','1983','1984','1985','1986'
         db '1987','1988','1989','1990','1991','1992'
         db '1993','1994','1995'
	;年份

         dd 16,22,382,1356,2390,8000,16000,24486,50065,97479
         dd 140417,197514,345980,590827,803530,1183000,1843000
         dd 2759000,3753000,4649000,5937000
	;收入
         
         dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793
         dw 4037,5635,8226,11542,14430,15257,17800
	;雇员数

data ends

table segment
         db 21 dup ('year summ ne ?? ')
		 dw 0,0,0,0,0,0,0,0
table ends

code segment
  start: mov ax, data
		 mov ds, ax
		 mov ax, table
		 mov ss, ax
		 mov sp, 160H
		 mov dx, 0
		 mov bp, 0
		 mov bx, 0
		 mov si, 0
		 mov di, 0
		 mov cx, 21
		 
	T:   push cx
		 mov cx, 2
		 mov di, 0
		 
		 D: mov ax, [bx]
			mov [bp+di] , ax
			mov ax , [54H+si]
			mov [bp+di+5H] , ax
			add bx, 2
			add si, 2
			add di, 2
		loop D
		mov di, dx
		mov ax , [ 0A8H+di]
		mov [bp+0AH] , ax
		add dx, 2
		push dx
		push bx
		mov di, 0
		mov bx, ax
		mov ax, [bp+di+5H]
		add di, 2
		mov dx,[bp+di+5H]
		div bx
		mov [bp+0DH] , ax
		pop bx
		pop dx
		pop cx
		add bp, 10H
	loop T	
			
	mov ax,4c00H
	int 21H
code ends

end start





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值