【发布时间】:2016-09-17 17:01:26
【问题描述】:
.model small
.stack
.data
msg1 db "Enter string max of 9 characters: $"
msg2 db 13,10, "Enter a number: $"
msg3 db 13,10, "Midstring: $"
strNine db "$"
num db 0,"$"
mid db "$"
varName label byte
maxL db 10
actL db 0
actCont db 10 dup("?")
.code
mov ax,@data
mov ds,ax
;-------------------- Input String ---------------------
mov ah,9
lea dx,msg1
int 21h
mov ah,0ah
int 21h
mov strNine,al
mov bh,strNine
;-------------------- Number ---------------------
mov ah,9
lea dx,msg2
int 21h
mov ah,1
int 21h
mov num,al
mov bl,num
;-------------------- Midstring ---------------------
mov ah,9
lea dx,msg3
int 21h
mov ah,4ch
int 21h
END
我需要找到中间字符串,但由于我是汇编语言的新手,所以我被困住了。
预期行为:
Enter max of 9 String: helloword
Enter a number: 3
Midstring: lloword
前导空格h和e因用户输入的数字而被删除。
我得到的唯一部分是从用户那里获取输入,这是我保存在 BX 内存中用于索引的字符串和数字
我只需要你们的一些提示/指南来完成这个程序。
【问题讨论】:
-
SO 不是寻求指南的正确位置,但stackoverflow.com/tags/x86/info 确实有很多文档和指南的链接。提示:检查您正在使用的系统调用的文档。很确定 DOS 读取字符串函数需要一个指向缓冲区的指针。我怀疑您当前的程序甚至可以打印整个字符串。尾随子字符串在以特殊字符结尾的字符串中是微不足道的:只需传递一个指向起点的指针,它仍然在同一个地方结束。
-
@PeterCordes 谢谢。很抱歉要求提示或指南。我现在真的很困惑如何使用寄存器和十六进制代码。
-
如果您的意思是 ah=code DOS 系统调用,请检查 DOS 中断列表以获取有关系统调用做什么的文档。字符串中间问题只是指针数学。
-
我只是需要你们的一些提示/指南我知道你们已经掌握了这些提示。效果如何?
标签: string assembly x86 x86-16 dos