汇编:采用址表的方法编写程序实现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
"你的指尖,拥有改变世界的力量! "
欢迎关注我的个人博客:https://sugarat.top