Assembly 解释一些ASM

Assembly 解释一些ASM,assembly,x86,reverse-engineering,dos,Assembly,X86,Reverse Engineering,Dos,我有这个ASM代码,我需要帮助解释它,主要是宏。我尝试了一个ASM-to-C反汇编工具,但无法将其用于多个文件,其他文件远远超出了我的预算。 宏公司: pokazvane_cifra_dl macro program.asm: $prompt> exe.exe abcde edcba$prompt> 。型号小 .烟囱100小时 .数据 .代码 开始: mov cx,5 第1点: mov-ah,01h int 21h mov啊,0h 推斧 环povtori1 po

我有这个ASM代码,我需要帮助解释它,主要是宏。我尝试了一个ASM-to-C反汇编工具,但无法将其用于多个文件,其他文件远远超出了我的预算。
宏公司:

pokazvane_cifra_dl macro
program.asm:

$prompt> exe.exe
    abcde
    edcba$prompt>
。型号小
.烟囱100小时
.数据
.代码
开始:
mov cx,5
第1点:
mov-ah,01h
int 21h
mov啊,0h
推斧
环povtori1
pokazvane_znak_dl 10d
pokazvane_znak_dl 13d

mov cx,5 第二点: 波普dx mov啊,02h int 21h 环povtori2 出口 结束-开始

非常感谢您的帮助。

pokazvane_cifra_dl macro
:将值
dl+48
显示为ASCII字符

如果
dl
是从
0
9
的值,它将显示相应的ASCII数字
'0'
-
'9'
,因此宏的名称类似于“display digit”(尽管您也可以使用例如
dl=40
来调用它,并且它将显示ASCII字符
'X'


exit macro
:将控制返回DOS(整个源代码是针对DOS平台的,即16位实模式x86程序集,带有
int 21h
,用于系统服务,即需要类似DOS的操作系统才能工作)


pokazvane_znak_dl'X'
宏:与第一个宏略有不同,这次显示任何ASCII字符,如
pokazvane_znak_dl'X'
以显示
'X'


eho_al宏
:是否显示
dl
中的ASCII字符。不知道为什么名称会显示
eho_al
,但它根本不会使用
al
,相反,如果它不在
int 21h
周围推/弹出ax,它会破坏
al
中的值


守则本身:

  • 将从输入中读取5个字符(ASCII),然后
    将它们推送到堆栈上

  • 显示两个字符
    10
    13
    以创建“新行”(DOS中正确的顺序是
    13
    10
    ,另一种方式)

  • 然后它将从堆栈中逐个弹出这5个字符,并在屏幕上显示每个字符

  • 退出待办事项

我没有验证代码中没有bug,但是如果它没有bug,那么输出应该如下所示:

我不确定DOS提示符在执行后会到达哪里,DOS会插入额外的新行,还是会像我上面想象的那样到达。第一个“abcde”由用户输入,第二个由代码显示



编辑:我忘记了输入/输出的push+pop-in循环将有效地反转输入“字符串”,因为堆栈是后进先出(Last-in-First-Out)类型的队列/容器(我仍然没有真正编译并运行它,所以如果您真的需要100%回答代码的功能,请运行它)。

宏?有四个。。。哪一个?你查阅过DOS中断参考吗?这是你的母语吗?这些名字看起来很有解释力,有什么你不明白的吗?@Jester尽管我看得很仔细,但我只能看到3个。@tofro考虑到格式错误…)有4种方法。在尝试对任何组件进行逆向工程之前,可能首先要进行组装课程,这样你才能理解说明的作用。事实上,RE通常比编写自己的代码更难,所以如果你连这些琐碎的代码都不懂的话,那么尝试RE就没有什么意义了。非常感谢你,你是一个生命的救世主。
include macro.inc
$prompt> exe.exe
    abcde
    edcba$prompt>