1. 程式人生 > >彙編:採用址表的方法編寫程式實現C程式的switch功能

彙編:採用址表的方法編寫程式實現C程式的switch功能


//待實現的C程式
1
void main() 2 { 3 int grade=90; 4 switch(grade/1-0) 5 { 6 case 9: 7 printf("excellence"); 8 break; 9 case 8: 10 printf("good"); 11 break; 12 case 7: 13 printf("average"); 14 break; 15 case 6: 16 printf("pass"); 17 break; 18 default: 19
printf("fail"); 20 } 21 }

 

彙編程式碼:

 1 ;採用地址表的方法編寫彙編程式實現以下的C程式的功能
 2 DATAS SEGMENT
 3 grade dw 90
 4 ComTab dw coma,comb,comc,comd
 5 g1 db 'excellent','$'
 6 g2 db 'good','$'
 7 g3 db 'average','$'
 8 g4 db 'pass','$'
 9 g5 db 'fail','$'
10 DATAS ends
11 CODES SEGMENT
12     ASSUME CS:
CODES, DS:DATAS 13 START: 14 mov AX,DATAS 15 mov DS,AX ;把需要比較的兩個數字放入兩個暫存器中 16 17 xor ax,ax 18 xor bl,bl 19 ;存放運算元的暫存器進行清0 20 mov Ax,grade;待操作的數 21 mov bl,0aH 22 div bl ;除以10 23 24 and ax,00FFH 25 cmp
Ax,9 26 ja default 27 cmp Ax,6 28 jb default 29 ;結果小6或者大於9則跳轉到預設輸出 30 xor bx,BX ;BX清0 31 mov bl,09H ;將bl設為9 32 sub bx,ax ;用09去減上面得到的結果(AX) 得鏈連地址表 33 add bx,bx 34 jmp ComTab[BX] 35 36 default: 37 lea dx,g5 38 mov ah,09h 39 int 21H 40 jmp exit 41 coma: 42 lea dx,g1 43 mov ah,09H 44 int 21H 45 jmp exit 46 comb: 47 lea dx,g2 48 mov ah,09H 49 int 21H 50 jmp exit 51 comc: 52 lea dx,g3 53 mov ah,09H 54 int 21H 55 jmp exit 56 comd: 57 lea dx,g4 58 mov ah,09H 59 int 21H 60 jmp exit 61 exit: 62 mov ah,4ch 63 int 21H 64 CODES ends 65 end START