《汇编语言》实验代码及详解(保姆级)

Posted Lzy_Gofaster

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《汇编语言》实验代码及详解(保姆级)相关的知识,希望对你有一定的参考价值。

汇编语言实验七完整代码

准备开发工具:notepad++(用来编写汇编代码)

                         DOSBOX(windows系统中用来运行和调试汇编代码的编译器,在VMware的虚拟机linux环境下也可以实现运行,这里不做演示)

Tips:此实验是目前为止汇编语言最复杂的实验代码及功能实现,汇编语言作为底层语言,在本实验中足以证明其魅力所在,程序本身一定要自己先动手写,以后一定还会涉及到该程序中的相关知识点,需要耐心且严谨。

下面是代码及详解:(notepad++中完成开发)

assume cs:codesg,ds:data,es:table

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个字符串
	;db定义字节类型变量,一个字节数据占1个字节单元,读完一个,偏移量加1
	
	dd 16,22,382,1356,2390,8000,16000,24486,50065,94749,140417,197514
	dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5973000
	;以上是表示21年公司总收入的21个dword型数据
	;dd定义双字类型变量,一个双字数据占4个字节单元,读完一个,偏移量加4
	
	dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
	dw 11542,11430,45257,17800
	;dw定义字类型变量,一个字数据占2个字节单元,读完一个,偏移量加2

data ends ;表明数据段的结束,即为数据定义完成

table segment ;定义一个表格
	db 21 dup('year summ ne ?? ') ;dup中的内容循环存储21次,是表格内容
table ends ;表格定义结束

codesg segment ;代表代码段开始
	
start:
		mov ax,data
		mov ds,ax
		mov ax,table
		mov es,ax ;这里es是额外的寄存器,是用来存放table的数据,其功能和ds相似
		
		mov bx,0
		mov si,0
		mov di,0 ;bx,ei,di在这里我们也都用来控制循环变量
		mov cx,21 ;定义循环次数为21,因为有21年的数据
		
		s: ;进入循环
			mov al,[bx]
			mov es:[di],al
			mov al,[bx+1]
			mov es:[di+1],al
			mov al,[bx+2]
			mov es:[di+2],al
			mov al,[bx+3]
			mov es:[di+3],al
			;以上八行代码的作用是存放年份数据(只存放了一个数据,每两行存放一个数字,并且该数字是低位的)
			
			mov  ax,54h[si]	;收入的偏移为54h
			mov  es:5h[di],ax ;因为收入数据是紧挨着年份数据来存放的,所以这里要转到table中的时候要挨着上面的年份继续存放,所以收入数据在5h的地方开始继续存放在table中
			mov  dx,56h[si];因为数据类型是dd类型,所以我们将低位的数据存放在ax中,高位数据存放在dx中
			mov  es:7h[di],ax ;以此类推即可,高位数据存放在高位置
			;以上四行代码的作用是存放年收入的数据
			
			
			mov  ax,0a8h[bx];偏移地址位0a8h	
			mov  es:0Ah[di],ax
			;以上两行代码的作用是存放雇员的数据
			
			
			mov  ax,54h[bx] 
			mov  dx,56h[bx] ;以上两句是初始化被除数
			div word ptr ds:0A8h[di] ;进行除法
			mov   es:0dh[di],ax	
			;以上代码的作用是计算平均收入
			
			add si,4
			add bx,2
			add di,16;改变循环变量的值
		
		loop s;循环终止
		
		mov ax,4c00h
		int 21h ;这两句代码代表程序结束,为stipulate
codesg ends
end start

在DOSBox中输入r指令进行查看寄存器内容:

实验七知识点总结:

一、数据定义

db定义字节类型变量,一个字节数据占1个字节单元,读完一个,偏移量加1

dd定义双字类型变量,一个双字数据占4个字节单元,读完一个,偏移量加4

dw定义字类型变量,一个字数据占2个字节单元,读完一个,偏移量加2

二、DOSBOX运行指令汇总

 

 

以上是关于《汇编语言》实验代码及详解(保姆级)的主要内容,如果未能解决你的问题,请参考以下文章

C语言链栈及基本操作(包含入栈和出栈)保姆级详解

Anaconda介绍安装及使用保姆级教程

C语言动态内存管理及使用总结篇初学者保姆级福利

13 万字 C 语言从入门到精通保姆级教程2021 年版 (建议收藏)

整天说要做数据挖掘,咱先把R安装上好么?保姆级R语言安装指导。

肝了 10 万字 ,Go 语言保姆级编程教程2021最新版(建议收藏)