注册 登录
编程论坛 汇编论坛

字符串的处理问题

msshadow 发布于 2007-05-30 13:18, 724 次点击
我是汇编的初学者,向各位大侠求教:
信息检索:已知有10组等长字符串,编程实现当用户输入0—9之间的任一数字时,输出对应的字符串。
6 回复
#2
爱以走远2007-05-30 13:32
就是一个一个比较 在用jmp
你自己去实现
#3
msshadow2007-05-30 17:16
能不能再指点得清楚点呢,最好写点代码。。。
谢谢。。
#4
菜鸟上路2007-05-30 17:54
跟下面程序功能类似,把func1,func2,func3改成对应的字符串定义
[CODE]

.386
.model small
option casemap:none

data segment
msg db 'Please input your choice(1-3):$'
table dw func1,func2,func3,default,exit
data ends

code segment use16
assume cs:code ,ds:data
start:
;初始化数据段寄存器
mov ax,data
mov ds,ax

;输出提示信息
;调用DOS中断的9号功能
mov dx,offset msg
mov ah,9h
int 21H

call newLine

;;读入数据,这里假定用户会根据提示输入正确数据,
;;因此不做纠错工作
mov ah,1
int 21h

;;将读入的ASCII码处理成序数
sub al,'1'
shl al,1
xor bx,bx
mov bl,al
cmp bl,4 ;;关闭这两句会出现一些不直观的问题.
ja default
jmp table[bx]
func1:
;;执行等于1时的功能
mov dl,'O'
mov ah,2
int 21h
;退出分支语句
jmp exit
func2:
;;执行等于2时的功能
mov dl,'B'
mov ah,2
int 21h
;退出分支语句
jmp exit
func3:
;;执行等于3时的功能
mov dl,'T'
mov ah,2
int 21h
;退出分支语句
jmp exit
default:
;;执行默认功能
mov dl,'N'
mov ah,2
int 21h
exit:
;;退出语句
;DOS的结束语句
mov ax,4c00h
int 21h


newLine proc
mov al,0AH
mov ah,0Eh
int 10H
mov al,0DH
mov ah,0Eh
int 10H
ret
newLine endp
code ends
end start

[/CODE]
#5
msshadow2007-05-30 18:10

嗯,我马上试试,谢谢了...

#6
msshadow2007-05-30 18:34

data segment
msg db 'Please input your choice(1-9):$'
table dw func1,func2,func3,func4,func5,func6,func7,func8,func9,default,exit
data ends

code segment
assume cs:code ,ds:data
start: ;初始化数据段寄存器
mov ax,data
mov ds,ax ;输出提示信息
;调用DOS中断的9号功能
mov dx,offset msg
mov ah,9h
int 21H

call newLine

;;读入数据,这里假定用户会根据提示输入正确数据,
;;因此不做纠错工作
mov ah,1
int 21h

;;将读入的ASCII码处理成序数
sub al,'1000'
shl al,1
xor bx,bx
mov bl,al
cmp bl,4 ;;关闭这两句会出现一些不直观的问题.
ja default
jmp table[bx]
func1:
;;执行等于1时的功能
mov dl,'O100'
mov ah,9
int 21h
;退出分支语句
jmp exit
func2:
;;执行等于2时的功能
mov dl,'11100'
mov ah,9
int 21h
;退出分支语句
jmp exit
func3:
;;执行等于3时的功能
mov dl,'5200'
mov ah,9
int 21h
;退出分支语句
jmp exit
func4:
;;执行等于3时的功能
mov dl,'2256'
mov ah,9
int 21h
;退出分支语句
jmp exit
func5:
;;执行等于3时的功能
mov dl,'6930'
mov ah,9
int 21h
;退出分支语句
jmp exit
func6:
;;执行等于3时的功能
mov dl,'8250'
mov ah,9
int 21h
;退出分支语句
jmp exit
func7:
;;执行等于3时的功能
mov dl,'8652'
mov ah,9
int 21h
;退出分支语句
jmp exit
func8:
;;执行等于3时的功能
mov dl,'6930'
mov ah,9
int 21h
;退出分支语句
jmp exit
func9:
;;执行等于3时的功能
mov dl,'9300'
mov ah,9
int 21h
;退出分支语句
jmp exit
default:
;;执行默认功能
mov dl,'N'
mov ah,2
int 21h
exit: ;;退出语句
;DOS的结束语句
mov ah,4ch
int 21h


newLine proc
mov al,0AH
mov ah,0Eh
int 10H
mov al,0DH
mov ah,0Eh
int 10H
ret ;这段可不可以解释一下?
newLine endp
code ends
end start
把dos中断号调用改了之后,还要怎么做呢?

#7
菜鸟上路2007-05-30 18:51
先理解下程序的意思再做就简单了
1