-5

我试图制作这样的开关盒:

 switch (si)
{
 case 1:
   printf( “Number One” );
   break;

case 2:
   printf( “Number Two” );
   break;

 case 3:
   printf( “Number Three” );
   break;

 case 4:
  printf( “Number Four” );
  break;
 }

在带有分支表/跳转表的汇编 8086 中:

enter code here
org 100h 

mov si,1 
mov bx,10
sub si,1
add si,si
mov bx,[bx+si]
jmp bx 

address:
dw 14 Case1
dw 17 Case2
dw 21 Case3
dw 24 Case4 

Case1: PRINTN "Number One"
jmp End

Case2: PRINTN "Number Two"   
jmp End

Case3: PRINTN "Number Three"
jmp End

Case4: PRINTN "Number Four"

End:
mov ah, 0
int 16h
ret

PRINTN 类似于 C 中的 printf。

我的代码不起作用,我不知道为什么......

我做错了什么?

4

1 回答 1

1

使用表格和存储一些字符串的示例:

表本身的地址 = OFFSET JTab

JTab dw OFFSET Case1, OFFSET Case2, OFFSET Case3, OFFSET Case4

一些字符串的地址,偏移量为 T1、T2、T3、T4,长度为 len1、len2、...

T1 db "Number One"
len1 = ($-T1)

T2 db "Number Two"
len2 = ($-T2)

T3 db "Number Three"
len3 = ($-T3)

T4 db "Number Four"
len4 = ($-T4)
于 2014-05-11T09:31:44.193 回答