在汇编语言的新行上给出 Space

Give Space on new line in assembly language

我是汇编语言的新手。我的任务是为以下输出编写代码:

Q) 使用Only One Macro definition写出以下输出的汇编代码

My name is xxxxx
 My rollnumber is yyyyy
   What is Your name

到目前为止我所做的是打印这些字符串,但我没有在字符串的开头得到这些空格。

我的密码:

display macro data    
    
    mov ah,9                    
    lea dx,msg1                 
    int 21h
    
    mov ah,9                    
    lea dx,msg2                 
    int 21h 
    
    mov ah,9                    
    lea dx,msg3                 
    int 21h  
    
endm

.model small
.stack 100h     

.data 

 msg1 db "My name is Adeena Lathiya $" 
 msg2 db 0ah,0dh, "My roll number is SE-009 $"
 msg3 db 0ah, 0dh, "What is Your name $"   
 
.code
 main proc
    
       mov ax,@data
       mov ds,ax 
       
       display data
       
       main endp
 end main

这会将输出显示为:

My name is xxxxx
My rollnumber is yyyyy
What is Your name

请告诉我如何在字符串的开头添加空格

...using Only One Macro definition

当然任务说你只能有 1 个宏定义,但它并没有告诉你只调用一次宏!
此外,宏的强大功能部分来自其可替换参数,您当前的实现提到但根本没有使用!

显示

这个基本宏使用 1 个参数:aString 指定消息的地址。

Display MACRO aString
    lea   dx, aString
    mov   ah, 09h        ; DOS.PrintString
    int   21h
ENDM

像这样使用它:

    mov   ax, @data
    mov   ds, ax
    Display msg1
    Display msg2
    Display msg3

    ...

    msg1 db "My name is Adeena Lathiya", 13, 10, "$" 
    msg2 db " My roll number is SE-009", 13, 10, "$"
    msg3 db "   What is Your name $"
             ^
             The required spaces!

此处您要查找的空格已插入到存储的字符串中

IndentedDisplay

这次宏使用了2个参数:Indentation指定文本前面的空格数,aString指定地址消息。

IndentedDisplay MACRO Indentation, aString
    LOCAL More, Skip
    mov   cx, Indentation
    jcxz  Skip
  More:
    mov   dl, " "
    mov   ah, 02h        ; DOS.PrintChar
    int   21h
    loop  More
  Skip:
    lea   dx, aString
    mov   ah, 09h        ; DOS.PrintString
    int   21h
ENDM

像这样使用它:

    mov   ax, @data
    mov   ds, ax
    IndentedDisplay 0, msg1
    IndentedDisplay 1, msg2
    IndentedDisplay 3, msg3

    ...

    msg1 db "My name is Adeena Lathiya", 13, 10, "$" 
    msg2 db "My roll number is SE-009", 13, 10, "$"
    msg3 db "What is Your name $"

此处您要查找的空格将从 运行 宏代码.

中插入