【问题标题】:Assembly Language: Completing the program to get the midstring汇编语言:完成程序以获取中间字符串
【发布时间】: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


【解决方案1】:
mov ah,9
lea dx,msg1
int 21h
mov ah,0ah
int 21h

这个输入是如何工作的?在您调用 DOS 输入函数的那一刻,您的 DX 寄存器仍然为 msg1 设置,而它应该被设置为指向 varName 输入结构。


mov ah,0ah
int 21h
mov strNine,al
mov bh,strNine

您希望 AL 寄存器在这一点上保存什么?这个 DOS 函数没有在那里存储有用的值!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-06
    • 1970-01-01
    • 1970-01-01
    • 2014-06-06
    • 1970-01-01
    • 2022-11-25
    相关资源
    最近更新 更多