关于汇编字符串数组输出问题?
答案:1 悬赏:20
解决时间 2021-10-13 11:45
- 提问者网友:凉末
- 2021-10-12 18:08
关于汇编字符串数组输出问题?
最佳答案
- 二级知识专家网友:英雄的欲望
- 2021-10-12 18:32
; 本程序通过编译,运行正确
Code Segment
Assume CS:Code,DS:Code
; -----------------------------------------
; 功能:显示指定地址(Str_Addr)的字符串
; 入口:
; Str_Addr=字符串地址(要求在数据段)
; 用法: Output Str_Addr
; 用法举例:Output PromptStr
Output MACRO Str_Addr
lea dx,Str_Addr
mov ah,9
int 21h
EndM
; -----------------------------------------
; 功能:输出回车换行
Enter_CTLF proc Near
push ax
push dx
mov ah,02h
mov dl,0dh
int 21h
mov dl,0ah
int 21h
pop dx
pop ax
ret
Enter_CTLF endp
; -----------------------------------------
N equ 20
Prompt_Str db 'Please input words: $'
Addr_Words dw N dup(?) ;预置N个字符串地址,实际输入的单词个数不会超过N个。
Strings dw ? ;实际输入的单词个数
Start: push cs
pop ds
push cs
pop es ;使数据段、附加段与代码段同段
cld
lea di,Addr_Words
lea si,Words ;字符串缓冲区地址
mov cx,N ;最多输入N个单词
Output Prompt_Str ;提示输入单词
Input_Word: call Enter_CTLF ;输出一个回车、换行
mov byte ptr [si],21 ;每个单词最多20个字符
mov dx,si
inc si
mov ah,0ah
int 21h
lodsb ;读入实际输入的字符个数,即单词长度
test al,0ffh ;若直接回车?
jz @@L1 ;是,结束单词输入
xor ah,ah
mov bx,ax
mov ax,si
stosw ;保存这个单词的地址
add si,bx
mov [si],'$' ;使之能用dos功能调用9号功能显示这个字符串(单词)
inc si
loop Input_Word ;输入下一个单词
@@L1: sub di,offset Addr_Words
shr di,1
mov Strings,di ;保存实际输入的单词个数
Exit_Proc: mov ah,4ch ;结束程序
int 21h
Words db ?
Code ENDS
END Start ;编译到此结束
13
Code Segment
Assume CS:Code,DS:Code
; -----------------------------------------
; 功能:显示指定地址(Str_Addr)的字符串
; 入口:
; Str_Addr=字符串地址(要求在数据段)
; 用法: Output Str_Addr
; 用法举例:Output PromptStr
Output MACRO Str_Addr
lea dx,Str_Addr
mov ah,9
int 21h
EndM
; -----------------------------------------
; 功能:输出回车换行
Enter_CTLF proc Near
push ax
push dx
mov ah,02h
mov dl,0dh
int 21h
mov dl,0ah
int 21h
pop dx
pop ax
ret
Enter_CTLF endp
; -----------------------------------------
N equ 20
Prompt_Str db 'Please input words: $'
Addr_Words dw N dup(?) ;预置N个字符串地址,实际输入的单词个数不会超过N个。
Strings dw ? ;实际输入的单词个数
Start: push cs
pop ds
push cs
pop es ;使数据段、附加段与代码段同段
cld
lea di,Addr_Words
lea si,Words ;字符串缓冲区地址
mov cx,N ;最多输入N个单词
Output Prompt_Str ;提示输入单词
Input_Word: call Enter_CTLF ;输出一个回车、换行
mov byte ptr [si],21 ;每个单词最多20个字符
mov dx,si
inc si
mov ah,0ah
int 21h
lodsb ;读入实际输入的字符个数,即单词长度
test al,0ffh ;若直接回车?
jz @@L1 ;是,结束单词输入
xor ah,ah
mov bx,ax
mov ax,si
stosw ;保存这个单词的地址
add si,bx
mov [si],'$' ;使之能用dos功能调用9号功能显示这个字符串(单词)
inc si
loop Input_Word ;输入下一个单词
@@L1: sub di,offset Addr_Words
shr di,1
mov Strings,di ;保存实际输入的单词个数
Exit_Proc: mov ah,4ch ;结束程序
int 21h
Words db ?
Code ENDS
END Start ;编译到此结束
13
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯