//待实现的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 ends11 CODES SEGMENT12 ASSUME CS:CODES, DS:DATAS13 START:14 mov AX,DATAS15 mov DS,AX ;把需要比较的两个数字放入两个寄存器中16 17 xor ax,ax18 xor bl,bl19 ;存放操作数的寄存器进行清020 mov Ax,grade;待操作的数21 mov bl,0aH22 div bl ;除以1023 24 and ax,00FFH25 cmp Ax,926 ja default 27 cmp Ax,628 jb default 29 ;结果小6或者大于9则跳转到默认输出30 xor bx,BX ;BX清031 mov bl,09H ;将bl设为932 sub bx,ax ;用09去减上面得到的结果(AX) 得链连地址表33 add bx,bx34 jmp ComTab[BX]35 36 default:37 lea dx,g538 mov ah,09h39 int 21H 40 jmp exit41 coma:42 lea dx,g143 mov ah,09H44 int 21H45 jmp exit46 comb:47 lea dx,g248 mov ah,09H49 int 21H50 jmp exit51 comc:52 lea dx,g353 mov ah,09H54 int 21H55 jmp exit56 comd:57 lea dx,g458 mov ah,09H59 int 21H60 jmp exit61 exit:62 mov ah,4ch63 int 21H64 CODES ends65 end START