彙編:分支程序

彙編:分支程序

一、 實驗目的:

  1. 能夠熟練的進行分支程序的編寫,掌握條件語句對應的彙編語言指令的實現
  2. 掌握多個條件的分支語句的實現原理,理解C語言中的邏輯運算“短路”特徵
  3. 熟練利用地址表實現多路分支

二、 實驗內容

  1. 編寫彙編語言程序段完成以下的分段函數的值的計算

提示:計算中的變量X,Y爲符號數,因此在使用條件轉移語句的時候應當用符號數的轉移指令
2. 編寫彙編語言程序段分別完成以下的兩個C語言的功能
#include <stdio.h>
int main()
{
int a=5,b=6,c=7,d=8,m=2,n=2;
(m=a<b)||(n=c>d);
printf("%d\t%d",m,n);
}
#include <stdio.h>
int main()
{
int a=5,b=6,c=7,d=8,m=2,n=2;
(m=a>b)&&(n=c>d);
printf("%d\t%d",m,n);
}
提示:注意C語言表達式的計算順序;“或”邏輯前面爲1,“與”邏輯前面爲0就會發生短路;編寫彙編程序時可以將以上C語言程序中的變量定義爲DW
3. 採用地址表的方法編寫彙編程序實現以下的C程序的功能
void main()
{
int grade=90;
switch(grade/10)
{
case 9:
printf(“excellence”);
break;
case 8:
printf(“good”);
break;
case 7:
printf(“average”);
break;
case 6:
printf(“pass”);
break;
default:
printf(“fail”);
}}
提示:除以10的時候應當用16位除以8位的除法指令,參考hello world程序中輸入字符串的例子輸出字符串,參照課本上利用地址表實現多路分支語句。

三、 實驗過程

編寫源代碼,完成後截圖源代碼
1.

include io32.inc
.data	
	x	byte	3
	y	byte	5
	fxy	byte	0	
.code	
start:
	cmp	x,1
	jge	notLessThanOne	
	cmp	y,1
	jg	notLessThanOne	
	mov	fxy,-1		
	jmp	pEnd		
notLessThanOne:
	cmp	x,1
	jl	notOneToFive	
	cmp	x,5
	jg	notOneToFive	
	cmp	y,1
	jl	notOneToFive	
	cmp	y,5
	jg	notOneToFive	
	mov	fxy,0		
	jmp	pEnd		
notOneToFive:
	cmp	x,5
	jle	pEnd
	cmp	y,5
	jle	pEnd
	mov	fxy,1		
pEnd:
                mov         eax,dword ptr fxy
	call dispsid
exit 0
end	start

在這裏插入圖片描述
2.

include io32.inc
.data
	a	dword	5
	b	dword	6
	c1	dword	7
	d	dword	8
	m	dword	2
	n	dword	2
	
.code
start:
		;如果m爲0,跳過lable1,否則跳轉到lable1
		mov eax,a
		cmp eax,b		
		jl resualt1
		jmp lable1

		;比較c1和d
		
		lable1:
			mov eax,c1
		 	cmp eax,d
			jg resualt2
		 	jmp resualt3

			;三種不同的結果組合
		resualt1:
			mov m,1
			jmp output1
        resualt2:
			mov m,0
			mov n,1
			jmp output1

		resualt3:
			mov m,0
			mov n,0
		    
		;輸出
		output1:
			mov eax,m
			call dispsid 

			mov al,9
			call dispc
			
			mov eax,n
			call dispsid 
	
  exit 0
end start

在這裏插入圖片描述
3.

include io32.inc
.data
			score byte 75
			branchTable dword branch1,branch2,branch3,branch4
			a1 byte 'excellence',0
			a2 byte 'good',0
			a3 byte 'average',0
			a4 byte 'pass',0
			a5 byte 'fail',0
.code
start:
			mov al,grade
			xor ah,ah
			mov bl,10
			div bl
			
			cmp al,6
			jb pEnd

			xor ebx,ebx
			mov bl,10
			sub bl,al
			
			xor bh,bh
			dec bl
			
			add bx,bx
			add bx,bx
			
			
			
			jmp branchTable[ebx]

		branch1:
			mov eax,offset a1
			jmp output
		
		branch2:
			mov eax,offset a2
			jmp output

		branch3:
			mov eax,offset a3
			jmp output
	
	    branch4:
			mov eax,offset a4
			jmp output

		pEnd:
			mov eax,offset a5
			
			

		output:
			
			call dispmsg
  exit 0
end start

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章