Arrays 简单的8086汇编字符串数组和打印

Arrays 简单的8086汇编字符串数组和打印,arrays,assembly,x86-16,dosbox,Arrays,Assembly,X86 16,Dosbox,我必须为我的汇编类编写一个程序,允许用户输入他/她的全名,然后程序利用and数组存储字符并按以下顺序打印:“LastName”、“Middle”(可选,可以有多个中间名)”“。我已经让我的程序几乎做到了这一点,只是它在姓氏的开头打印了一个“$”。我已经尝试增加索引(bx)但是它会给我一个乱码输出。我对汇编还比较陌生,所以请耐心等待。我想当我增加索引时,我的宏可能会干扰我的输出。另外请耐心等待我的格式。我永远无法正确传输代码。提前谢谢 这是我的密码: ;This Program Re

我必须为我的汇编类编写一个程序,允许用户输入他/她的全名,然后程序利用and数组存储字符并按以下顺序打印:“LastName”、“Middle”(可选,可以有多个中间名)”“。我已经让我的程序几乎做到了这一点,只是它在姓氏的开头打印了一个“$”。我已经尝试增加索引(bx)但是它会给我一个乱码输出。我对汇编还比较陌生,所以请耐心等待。我想当我增加索引时,我的宏可能会干扰我的输出。另外请耐心等待我的格式。我永远无法正确传输代码。提前谢谢

这是我的密码:

       ;This Program Reads in a user's full name and prints out the results in the format 
        'Lastname', 'Middle'(Optional), First using an array. 

 include pcmac.inc
.MODEL SMALL
    .586  ;Allows Pentium instructions. Must come after .MODEL

    .STACK 100h

    .DATA
 MAXBUF EQU 100
 GetBuf DB MAXBUF
 GetCnt DB ?
 CharStr DB  MAXBUF DUP (?)
 Message DB 'Enter your full name',10,13,'$'
 Message2 DB 'Here is your name in the correct format', 10,13,'$'
 Count DB 0

    .CODE
Array PROC  
    _Begin
    _PutStr Message
    _GetStr GetBuf


mov bl, GetCnt
sub bh,bh

   FindLast:

   cmp [CharStr+bx],32
   je SeperateLast
   dec bx
   inc Count        ;Counter to record how long the lastname is
   jmp FindLast



  SeperateLast:

     mov [CharStr+bx],'$'
    _PutStr Message2
    jmp Printlast



 FirstName:

     _PutCh ',',32              ;Add comma and space for readability
     _PutStr CharStr            ;Print up to the inputted dollar sign
     _PutCh 10,13

     jmp Done


   Printlast:

      cmp Count,0    
      je FirstName
      _PutCh[CharStr+bx]           ;Print Last Name Character by Character
      inc bx
      dec Count
      jmp Printlast

Done:


     _Exit 0
         Array ENDP

              END Array

从我在代码中看到的情况来看,您似乎正确地找到了姓氏。因为姓氏前的空格代表第一个和中间的名字的结尾,所以用姓氏前的$符号替换空格是有意义的。因为BX是您刚刚输入的美元符号的偏移量,您应该将BX增加1以跳过ove然后,您还需要将
Count
变量递减1

此代码:

mov [CharStr+bx],'$'
_PutStr Message2
jmp Printlast
大概应该是这样的:

mov [CharStr+bx],'$'
inc bx
dec Count
_PutStr Message2
jmp Printlast

从我在代码中看到的情况来看,您似乎正确地找到了姓氏。因为姓氏前的空格代表第一个和中间的名字的结尾,所以用姓氏前的$符号替换空格是有意义的。因为BX是您刚刚输入的美元符号的偏移量,您应该将BX增加1以跳过ove然后,您还需要将
Count
变量递减1

此代码:

mov [CharStr+bx],'$'
_PutStr Message2
jmp Printlast
大概应该是这样的:

mov [CharStr+bx],'$'
inc bx
dec Count
_PutStr Message2
jmp Printlast

我唯一能建议的是,你似乎能正确地找到姓氏,并用姓氏前面的$符号替换空格(这似乎是正确的)。在我看来,你似乎想跳过$符号,将
BX
增加一,然后将计数减少1。因此在
mov[CharStr+BX]之后,“$”
尝试添加
inc bx
,然后添加
dec Count
。我只是在增加bx,而忘了减少计数。谢谢!它没有显示箭头来标记您的答案是否正确。我会找到它并为您提供代表。谢谢!我唯一能建议的就是这个。您似乎找到了正确的答案e last name,然后将空格替换为姓氏前面的$符号(这似乎是正确的)。在我看来,您希望跳过$符号,方法是将
BX
增加1,然后将计数减少1。因此,在
mov[CharStr+BX]之后,“$”
尝试添加
inc bx
,然后添加
dec Count
。我只是在增加bx,而忘了减少计数。谢谢!它没有显示箭头来标记您的答案是否正确。我会找出它并为您获取代表。谢谢!由于您提到的原因,计数变量不是太高。我t超调1,因为FindLast循环在终止回车时错误地开始比较。(正确代码:
mov bl,GetCnt
sub bh,bh
dec bx
)由于您提到的原因,count变量不是太高。它超出了1,因为FindLast循环在终止回车时错误地开始比较。(正确代码:
mov bl,GetCnt
sub bh,bh
dec bx