为什么汇编区的问题总没人答呀!》》》》》》》》》》》》

whowho 2003-04-11 04:21:57
data segment
branch_table dw routine_1
dw routine_2
dw routine_3
dw routine_4
dw routine_5
data ends
code segment
main proc far
assume cs:code,ds:data
start:
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
mov ah,1
int 21h
and ax,00ffh
add ax,ax
mov si,ax
mov bx,branch_table[si]
jmp [bx]
routine_1:
mov dl,31h
mov ah,2
int 21h
ret
routine_2:
mov dl,32h
mov ah,2
int 21h
ret
routine_3:
mov dl,33h
mov ah,2
int 21h
ret
routine_4:
mov dl,35h
mov ah,2
int 21h
ret
routine_5:
mov dl,35h
mov ah,2
int 21h
ret
main endp
code ends
end start
我想输入1的时候就只调用ROUTINE_5,我写的有问题高人能不能帮忙改改
2、DX=998D(十进制) 用什么方法让DX递减的值依次显示出来呀?
...全文
30 4 点赞 打赏 收藏 举报
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
zara 2003-04-11
对第一个问题:
1. 首先int21h(AH=01h)获得的是输入的字符的ASCII, 须减30h('0')后才是序号,
不过你的基准是1, 不是0, 所以减'1':
mov ah,1
int 21h
and ax,00ffh
sub al, '1' ; * 新增
; 这里最好后输入合法性的检查, 否则, 共有5个入口地址, 若输入了6怎么办?
test al, al
js l_errInput ; <0 输入的小于 '1', 输入错误
cmp al, 5
ja l_errInput ; >5 输入的大于 '5', 输入错误
2. 对转移地址表的处理有误:
add ax,ax
mov si,ax
mov bx,branch_table[si] ; 这时bx中已经是最终的地址了
jmp [bx] ; 又取了一次地址, 所以错误了
上面的可以改为:
add ax, ax
mov bx, ax
jmp branch_table[bx]
3. 既然要求输入1时只调用routine_5, 那就将routine_5的地址放在第一个就是了:
branch_table dw routine_5, routine_2, ....
  • 打赏
  • 举报
回复
yunwww 2003-04-11
2
mov dx,998
mov cx,998
next: dec dx
......
loop next
不知对不对
我刚学汇编
  • 打赏
  • 举报
回复
whowho 2003-04-11
有人在吗????????????
  • 打赏
  • 举报
回复
whowho 2003-04-11
哦!各位高手答完要记得留个QQ呀!好联系:)
  • 打赏
  • 举报
回复
相关推荐
发帖
汇编语言
加入

2.1w+

社区成员

汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
申请成为版主
帖子事件
创建了帖子
2003-04-11 04:21
社区公告
暂无公告