汇编语言第八章-数据处理的两个基本问题 相关代码

8.6 寻址方式的综合应用

assume	cs:code,ds:data,ss:stack


data segment
	
	db 'DEC'      ;公司名   字符串 字节型
	db 'Ken Olsen';总裁名   字符串 字节型
	dw  137       ;排名改为38   整型   字型      26
	dw  41		  ;收入增加70 整型  字型         6F
	db 'PDP'	  ;著名产品改为VAX	字符串 字节型
data ends

stack segment  
	
stack ends

code segment
	start:  
			mov ax,stack
			mov ss,ax
			mov sp,32
			
			mov ax,data
			mov ds,ax
			
			mov bx,0
			mov word ptr ds:[bx+12],38
			add word ptr ds:[bx+14],70
			
			mov si,0
			mov byte ptr ds:[bx+16+si],'V'

			inc si
			mov byte ptr ds:[bx+16+si],'A'

			inc si
			mov byte ptr ds:[bx+16+si],'X'
			
			
			
			mov ax,4c00H
			int 21H
code ends
end start

8.7 div指令

除法-1

assume	cs:code,ds:data,ss:stack


data segment
	db 16,0,0,0,0,3,0
	
data ends

stack segment  
	
stack ends

code segment
	;16除以3  ax=5 dx=1
	start:  
			mov ax,stack
			mov ss,ax
			mov sp,32
			
			mov ax,data
			mov ds,ax
			

			
			mov ax,ds:[0]
			mov dx,ds:[3]
			
			div word ptr ds:[5]
			
			
			
			mov ax,4c00H
			int 21H
code ends
end start

除法-2

assume	cs:code,ds:data,ss:stack


data segment
	db 16,0,0,0,0,3,0
	
data ends

stack segment  
	
stack ends

code segment
	
	start:  
			mov ax,stack
			mov ss,ax
			mov sp,32
			
			mov ax,data
			mov ds,ax
			

			;利用除法指令计算100001/100    100,001->1 86A1   100->64 1001->3E9
			;mov ax,86A1h
			;mov dx,1h
			;mov bx,64h
			;div bx
			
		
			;利用除法指令计算1001/100
			;mov ax,3e9h
			;mov bl,64h
			;div bl
			
			;利用除法指令计算1001/256  256->100
			mov ax,3e9h
			mov dx,0
			mov bx,100h
			div bx
			
			
			mov ax,4c00H
			int 21H
code ends
end start

8.8 dd伪指令


assume	cs:code,ds:data,ss:stack

data segment
	dd 100001
	dd 100
	dw 0
	;使用第一个数除以第二个数,将商保存到第三中
data ends

stack segment stack  
	db 128 dup (1)
stack ends

code segment
	
	start:  
			mov ax,stack
			mov ss,ax
			mov sp,128
			
			mov ax,data
			mov ds,ax
			
			mov ax,ds:[0]
			mov dx,ds:[2]
			div word ptr ds:[4]
			mov ds:[5],ax
			
			mov ax,4c00H
			int 21H
code ends
end start

实验七

assume	cs:code,ds:data,ss:stack
;特别要注意数据的大小位置,数据的替换, 可以先单一处理一组数据,查看结果是否正确,再进入循环;逐步调试。


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个字符串year si
	
	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个数据 di
	
	dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
	dw 11542,14430,15257,17800  
	;表示公司每年人数 bx
data ends

table segment
	db 21 dup('year summ ne ?? ')
			  ;0123456789abcdef
table ends

stack segment stack  
	db 128 dup (1)
stack ends

code segment
	
	start:  
	;将data段中的数据按照格式写入到table段中,并计算21年中的人均收入(取整)
	;结果也按照下面的格式保存在table段中
			mov ax,stack
			mov ss,ax
			mov sp,128
			
			mov ax,data
			mov ds,ax
			
			mov ax,table
			mov es,ax
			
			mov si,0   ;年份 ds
			mov di,84  ;收入 ds
			mov bx,168 ;人数 ds
			mov bp,0   ;要修改的语句 es
			
			mov cx,21  ;循环次数
			
good:
			;计算平均值
			mov ax,ds:[di]  ;获得收入ax部分
			mov dx,ds:[di+2];获得收入dx部分
			div word ptr ds:[bx]		;除以每年人数
			;修改字符串部分
			
			
			;1.修改table中的年份
			push ds:[si]
			pop es:[bp]
			push ds:[si+2]
			pop es:[bp+2]
			
			;2.修改table中的收入
			push ds:[di]
			pop es:[bp+5]
			push ds:[di+2]
			pop es:[bp+7]
			
			;3.修改table中的人员数量
			push ds:[bx]
			pop es:[bp+0Ah]
			push ds:[bx+2]
			pop es:[bp+0Ah+2]
			
			;4.修改人均收入,取整后的平均收入
			mov es:[bp+0Dh],ax
			
			add si,4
			
			add di,4
			add bx,2
			add bp,16
			loop good
						
			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、付费专栏及课程。

余额充值