Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 英特尔8086汇编,试图理解标签。问题:_Assembly_X86 16_Tasm - Fatal编程技术网

Assembly 英特尔8086汇编,试图理解标签。问题:

Assembly 英特尔8086汇编,试图理解标签。问题:,assembly,x86-16,tasm,Assembly,X86 16,Tasm,我一直在努力理解一些基本的组装原理,为了一门课。我的教授建议我们使用TurboDebugger,它是80年代由borland制造的。按照教授的要求,我将所有内容直接写在TD上 我试图理解如何在汇编中使用标签。下面的代码是我的教授作为指导给出的。当我尝试运行任何与带有字符“start:”或“#start:”的标签相关的操作时,我会得到一个符号未找到错误。我的评论是为了解释我的思维过程。 这里有一个imbgur相册,显示了GUI和错误 我的问题是,我完全理解这个程序的功能,但我一辈子都不知道如何分配

我一直在努力理解一些基本的组装原理,为了一门课。我的教授建议我们使用TurboDebugger,它是80年代由borland制造的。按照教授的要求,我将所有内容直接写在TD上

我试图理解如何在汇编中使用标签。下面的代码是我的教授作为指导给出的。当我尝试运行任何与带有字符“start:”或“#start:”的标签相关的操作时,我会得到一个符号未找到错误。我的评论是为了解释我的思维过程。 这里有一个imbgur相册,显示了GUI和错误

我的问题是,我完全理解这个程序的功能,但我一辈子都不知道如何分配带有字符的标签

我显然错过了什么。有什么建议吗?提前谢谢:D

编辑:为清晰起见,按要求编辑


Edit2:我已经学习了一整天,我能想到的最好的办法是,当我需要使用跳转相关函数时,我计算需要多少行,然后不使用标签手动完成。比如说,我需要从cs:0100跳到前面的3-4行,我使用类似jxx 0106的东西。这有点让人扫兴,但这是我能想到的唯一解决方案。

你能展示一下你尝试使用
start:
的一个例子吗?因为一行上的
start:
本身就是标签的有效语法,它定义了符号
start
,您可以从其他说明中引用该符号。你在用什么汇编程序?复制/粘贴您为组装此文件而运行的确切shell命令。好的,我正在使用一个名为TurboDebugger的汇编器,如上所述,我通过DOSBox emulator运行该汇编器。在我上面的代码中,我写的每一行,都是我在汇编程序的命令行中输入的不同命令。因此,一个小型可复制的示例就是输入“continue”,然后点击enter。我用GUI制作了一本SFW imgur相册,这样的TurboDebugger真是一款优秀的软件。但我想不起来曾经在其中设置过标签(断点除外)。通常的工作流程是1)编码=>2)使用TASM汇编=>3)使用TurboDebugger进行调试=>Goto 1您的教授希望您通过将代码键入调试器来开发代码?听起来很疯狂。完成后,您只有机器代码,而没有带注释的源代码,对吗?你的教授是怎么教你标签的?如果你有一些有效的方法来输入问题中的代码,可以通过添加新的标签来完成。这个类叫做微型计算机,分为理论部分和实验部分。在实验室里,他简单地教了我们如何在TD中移动。然后是基本的功能,如ADD、SUB、XCHG、MOV、逻辑功能。现在在课程中,我们正在做数据流控制(我翻译了标题,不确定是否正确)。所以我们正在做一些比较。他给了我们一些书面指导,我们必须在TD项目中进行测试。这就是教训。如你所见,他编写了代码段,我在我的主要问题中发布了。我必须测试一下。BUUUUUT它不起作用。您能展示一下您尝试使用
start:
的过程吗?因为一行上的
start:
本身就是标签的有效语法,它定义了符号
start
,您可以从其他说明中引用该符号。你在用什么汇编程序?复制/粘贴您为组装此文件而运行的确切shell命令。好的,我正在使用一个名为TurboDebugger的汇编器,如上所述,我通过DOSBox emulator运行该汇编器。在我上面的代码中,我写的每一行,都是我在汇编程序的命令行中输入的不同命令。因此,一个小型可复制的示例就是输入“continue”,然后点击enter。我用GUI制作了一本SFW imgur相册,这样的TurboDebugger真是一款优秀的软件。但我想不起来曾经在其中设置过标签(断点除外)。通常的工作流程是1)编码=>2)使用TASM汇编=>3)使用TurboDebugger进行调试=>Goto 1您的教授希望您通过将代码键入调试器来开发代码?听起来很疯狂。完成后,您只有机器代码,而没有带注释的源代码,对吗?你的教授是怎么教你标签的?如果你有一些有效的方法来输入问题中的代码,可以通过添加新的标签来完成。这个类叫做微型计算机,分为理论部分和实验部分。在实验室里,他简单地教了我们如何在TD中移动。然后是基本的功能,如ADD、SUB、XCHG、MOV、逻辑功能。现在在课程中,我们正在做数据流控制(我翻译了标题,不确定是否正确)。所以我们正在做一些比较。他给了我们一些书面指导,我们必须在TD项目中进行测试。这就是教训。如你所见,他编写了代码段,我在我的主要问题中发布了。我必须测试一下。但是它没用。
mov al,[0000]   //this loads the low byte of a with 0s
mov bl,[0001]   //this loads the low byte of b with 0001
cmp al,1        // it compares the al with the number 1
je continue     // jumps if equal to continue
jmp exit        //jumps to exit with no condition
continue:       // here as you can see, it uses a label
           cmp bl,2   //compares bl to number 2
           je ok_label  // jump if equal to 2, to ok_label
           jmp exit     // jumps to exit with no condition
ok_label:       //another label here
          mov [0000],00    //moves to ds point,0000 the number 00
          mov [0001],00    //moves to ds point,0001 the number 00
exit:            // another label.