您当前的位置: 首页 > 

小天才才

暂无认证

  • 0浏览

    0关注

    168博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

汇编语言程序设计---三次实验内容

小天才才 发布时间:2021-03-08 16:20:16 ,浏览量:0

实验一

1.将内存fff:0~fff:b中的数据复制到0:200~0:20b单元中 要求:分别采用堆栈和常规访问实现

assume cs:codes

codes segment
start:
	;第一种方式采取传统访址
	; mov bx,0
	; mov cx,12
	;用字节复制12次
	; s:mov ax,0FFFFh
	  ; mov ds,ax
	  ; mov dh,[bx]
	  ; mov ax,0000h
	  ; mov ds,ax
	  ; mov [bx+200h],dh
	  ; inc bx
	; Loop s
	; mov ah,4ch
	; int 21h
	
	;第二种方式采取堆栈访址
	mov bx,0
	;堆栈以字为处理单位循环6次
	mov cx,6
	mov ax,0000h
	;设置ss,sp
	mov ss,ax
	;当前sp为中转地址
	mov sp,021ch
	s:mov ax,0FFFFh
	  mov ds,ax
	  mov dx,[bx]
	  push dx
	  mov ax,0000h
	  mov ds,ax
	  pop [bx+200h]
	  add bx,2
	Loop s
	
	mov ah,4ch
	int 21h
	
	
codes ends
end start

结果如下

在这里插入图片描述

2.从键盘输入两个1位的十进制数,相加以后以蓝底黄字显示在屏幕的第5行第16列。

assume cs:codes
datas segment
str1 db 'Please input first number:','$'
str2 db 'Please input second number:','$'
str3 db 0Ah,'$'
codes segment
start:	

	;调用系统清屏功能便于显示
	mov ax,0003h
	int 10h
	
	;设置ds
	mov ax,datas
	mov ds,ax
	
	;输出第一个提示信息
	lea dx,str1
	mov ah,9
	int 21h
	
	;读入第一个数字
	mov ah,1
	int 21h
	mov cl,0
	
	;转成数值大小存入cl
	sub al,48
	mov cl,al
	
	;输出换行
	lea dx,str3
	mov ah,9
	int 21h
	
	;输出第二个提示信息
	lea dx,str2
	mov ah,9
	int 21h
	
	;读入第二个数字
	mov ah,1
	int 21h
	
	;转成数值大小
	sub al,48
	
	;相加得值
	add cl,al
	
	;设置显存段地址
	mov ax,0b800h
	mov es,ax
	
	;比较加跳转
	;如何是9以上跳入L1执行
	cmp cl,9
	jg L1
	;显示两位数,其中十位始终为 0,个位直接加48显示
	mov bl,48
	mov es:[340h],bl
	mov byte ptr es:[341h],1eh
	add cl,48
	mov es:[342h],cl
	mov byte ptr es:[343h],1eh
	mov ah,4ch
	int 21h
L1:
	;显示两位数,其中十位始终为 1,个位减10加48显示
	mov bl,49
	mov es:[340h],bl
	mov byte ptr es:[341h],1eh
	sub cl,10
	add cl,48
	mov es:[342h],cl
	mov byte ptr es:[343h],1eh	
	mov ah,4ch
	int 21h
codes ends
end start

结果如下

在这里插入图片描述

实验二

1.编程实现书上问题7.9

assume cs:codesg,ss:stacksg,ds:datasg

stacksg segment
	dw 0,0,0,0,0,0,0,0
stacksg ends

datasg segment
	db '1. display      '
	db '2. brows        '
	db '3. replace      '
	db '4. modify       '
datasg ends

codesg segment
	start:
		mov ax,datasg
		mov ds,ax
		mov bx,0
		mov si,0
		mov cx,4
	s:
		;记得循环嵌套保存cx
		mov ax,cx
		mov cx,4
		mov si,0
		s0:
			and byte ptr [bx+si+3],11011111b
			inc si
		Loop s0
		add bx,16
		mov cx,ax
	Loop s
	mov ah,4ch
	int 21h
		
codesg ends

end start

效果如下

在这里插入图片描述

2.实验七

assume cs:codesg

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,140417,197514
	dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
	
	dw 3,7,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
	dw 11542,14430,15257,17800
data ends

table segment
	db 21 dup('your summ ne ?? ')
table ends

codesg segment
	start:
		mov ax,data
		mov ds,ax
		mov ax,table
		mov es,ax
		mov si,0
		mov di,0
		mov bx,0
		mov cx,21
		
	s:
		;year
		mov ax,ds:[si]
		mov es:[di],ax
		mov ax,ds:[si+2]
		mov es:[di+2],ax
		
		;income
		mov ax,ds:[si+84]
		mov es:[di+5],ax
		mov dx,ds:[si+84+2]
		mov es:[di+7],dx
		
		;number
		mov bp,ds:[bx+168]
		mov es:[di+10],bp
		
		;直接用内存单元中的数做除数
		div word ptr ds:[bx+168]
		mov es:[di+13],ax
		
		;步长不同
		add si,4
		add bx,2
		add di,16
		
	Loop s
	
	mov ah,4ch
	int 21h
		
codesg ends
end start

效果如下

在这里插入图片描述

3.将任意输入的十进制数(

关注
打赏
1658396332
查看更多评论
立即登录/注册

微信扫码登录

0.5349s