Fork me on GitHub

汇编:采用址表的方法编写程序实现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

 

posted @ 2019-01-09 18:28  粥里有勺糖  阅读(608)  评论(0编辑  收藏  举报