汇编:顺序程序设计

顺序程序设计

一、 实验目的:

  1. 能够熟练的进行顺序程序的编写,掌握基本的汇编语言指令的用法
  2. 通过程序设计理解掌握不同类型的数据混合运算的基本规则
  3. 熟练掌握各种寻址方式,深入理解逻辑地址和物理地址的相关概念
    二、 实验内容
    有三个长度分别为1、2、4个字节的数据,编写程序求和存放到内存中。
    程序1:三个数据均为无符号数,求和的结果考虑进位的存储。
    程序2:三个数据均为有符号数,求和的结果不考虑进位的存储(进位直接丢掉)
    请尽量使用各种寻址方式实现以上功能。
    提示
  4. 数据只有在长度一致(包含编码一致)的情况下才能运算,因此要考虑将所有的数据转换成统一的长度(本题可以将所有的数据转换成4个字节长再运算)。
  5. 符号数和无符号数的转换规则不一样(无符号数扩展时高位直接加0,有符号数用CBW、CWD指令)
  6. 通常,当数据的运算结果比原始数据的位数多的时候,结果的数据的存储单元的长度考虑为计算数据的宽度的两倍,例如,变量x的长度为8位,则计算X*X的结果应该用16位存储,以此类推。
  7. 在数据定义的时候,以下的定义语句的数据在内存中存储的结果是一样的。
    X Word 1234h X byte 34H,12H
    X Dword 12345678H X byte 78H,56H,34H,12H
  8. 16位的机器在一次加法中只能处理16位,若在16位的机器中运算一个32长的数据,只能先算低16位的数据,然后算高16位的数据时加上低位的进位。
    三、 实验过程
    编写源代码,完成后截图源代码

1

include io32.inc
;开始数据段的定义,分别定义长度为1、2、4的3个带符号的数据
.data	
	x byte 0fbh		;-5
	y word 8000h		;-32768
	z dword 0ffff8000h	;-32768
	result dword ?
;*********************************************************************************
.code	
start:	
	;符号扩展成为4个字节长的数据,注意cbw,cwd指令的用法
	mov	al,x
	cbw
	cwd
	mov	bx,ax
	mov	cx,dx
	;符号扩展y
	mov	ax,y
	cwd	
	;计算x+y
	add	ax,bx
	adc	dx,cx
	;计算和z相加的结果
	add	ax,word	ptr	z
	adc	dx,word	ptr	z+2
	;保存结果
	mov	word	ptr	result,ax
	mov	word	ptr	result+2,dx
call dispsid
exit 0
end start

2

include io32.inc
;定义数据段,其中存放了4个变量,长度分别为1、2、4、8个字节
;一般情况下,源程序中书写顺序连续的变量在内存中存储时也是连续的,因此本例中rusult从源代
;码看是定义了两个数据,但程序将其处理成一个8字节的变量
.data	
	x	byte	11h		;1byte
	y	word	0ffffh		;2byte	
	z	dword	0ffffffffh	;4byte
	result	dword	0,0		;8byte
;*********************************************************************************


.code	
start:
;以下代码将x从一个字节变为4个字节,结果放到dx:ax中
	mov	al,x
	xor	ah,ah
	xor	dx,dx		
;以下代码将y从两个字节变为4个字节,结果放到Cx:Bx中
	mov	bx,y
	xor	cx,cx	
;完成x+y的运算,结果放在dx:ax中
	add	ax,bx			;x和y的低16位相加,若有进位放到cf标志位中
	adc	dx,cx			;x和y的高16位相加,同时加上低位产生的进位
;本例中由于高位为0,因此看不到扩展的过程
	add	ax,word	ptr	z	;最低16位相加
	adc	dx,word	ptr	z+2	;次低16位相加
	mov	cx,0			;次高16位相加,高位为0,两个0相加,再加低位进位
	adc	cx,0
	mov	bx,0			;高16位相加,高位为0,两个0相加,再加低位进位
	adc	bx,0
;保存结果,注意是如何将定义的两个四字节数据当做一个8字节变量处理的
	mov	word	ptr	result	,ax
	mov	word	ptr	result+2	,dx
	mov	word	ptr	result+4	,cx
	mov	word	ptr	result+6	,bx	
call dispuid	
exit 0
end	start

猜你喜欢

转载自blog.csdn.net/qq_45056216/article/details/106894429
今日推荐