用汇编程序实现下列功能
Please input a string(length<9): ABCDEFG
Please input a char:B
The index is: 1
Please input a string(length<9): ABCDEFG
Please input a char:]
The char is invalid!
data segment
s1 db 'Please input a string(length<9):$'
s2 db 0ah,0dh,'Please input the index of the char to display:$'
s3 db 0ah,0dh,'The char is:$'
s4 db 0ah,0dh,'The index is invalid!$'
buf db 10,?,10 dup(?)
index db ?
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
lea dx,s1
mov ah,09h ;显示字符串 ds:dx=串地址 '$'结束字符串
int 21h
lea dx,buf
mov ah,0ah ; ds:dx = 缓冲区首地址; (ds:dx)=缓冲区最大字符数
int 21h ; 返回参数:(ds:dx+1)=实际输入的字符数
lea bx,buf
inc bx
mov cl,[bx] ;cl存储字符串长度
lea dx,s2
mov ah,09h ;显示字符串 ds:dx=串地址 '$'结束字符串
int 21h
mov ah,01h
int 21h
sub al,30h
mov index,al
cmp cl,al
jng error ;cl不大于al时跳转,实际是al < cl 才合法 jng 等价于 JLE
lea dx,s3
mov ah,09h ;显示字符串 ds:dx=串地址 '$'结束字符串
int 21h
mov bl,index
mov bh,0
mov dl,buf[bx+1] ;bx+1此时指向字符串第一个字符,所以[bx+1]就是所求位号
mov ah,02h ; 显示输出 dl = 输出字符
int 21h
mov ax,4c00h
int 21h
error:
lea dx,s4
mov ah,09h ;显示字符串 ds:dx=串地址 '$'结束字符串
int 21h
mov ax,4c00h
int 21h
code ends
end start