【发布时间】:2013-03-14 02:18:34
【问题描述】:
我很困惑寄存器在 TASM 或 Assembly 中的工作方式。尤其是在其中分配一个整数值时。我真的找不到清晰的教程。
谁能给我解释一下这些寄存器的用途:
AX, BX, CX, DX,
AH AL, BL BH, CL CH, DL DH
我看到一个使用 CX 作为循环计数器的程序。我也可以同时将它用作某个整数值的主机吗?
老实说,我有很多问题要问。我什至不知道如何在 x86 中执行加法、减法
我们的教授真的没有给我们任何参考。我们甚至没有被教导如何在汇编中进行数学运算。在讲座中,我们只给出了简要解释的代码(比如代码是如何工作的,而没有解释每一行的用途)。我们在活动中所做的就是复制粘贴他的代码,然后漫无目的地修改。
是的,他给出的任务是我们还不知道的。
抱歉在这里吐槽。
更新: 我想创建一个嵌套循环,这是一个伪代码。
; for (CX = 6; CX != 0; CX--) { // PSEUDO CODE,
; for (BL = 0; BL != 7-CX; BL++) {
; putchar(M+BL);
; }
; M--;
; putchar(10);
; putchar(13);
; }
我在尝试设置寄存器中的值时遇到了麻烦,因为我不知道它们是如何工作的。请向我解释我做错了什么。
【问题讨论】:
-
你打算用这段代码开始多少主题?这使得 3
-
您似乎没有在外循环结束时递减 CL?
-
我认为每个循环都会将
CX减 1?所以CL不等于CX? @Gunner 我真的必须尽快完成这项工作,否则我的主题会失败。对不起。 -
ax,bx,cx,dx,al,ah,bl, @9876543336@,ch,cl, @987654338 @、dh都是通用寄存器,有些功能只针对一个寄存器。参见例如。 swansontec.com/sregisters.htmleecg.toronto.edu/~amza/www.mindsec.com/files/x86regs.html(在 Google 搜索的第一个结果中:注册使用 x86 程序集)。 -
您可以使用:“rep lodsb”或“rep stosb”,如此处所述:fermi.mn.it/linux/quarta/x86/rep.htm 自动递减 cx,但我不认为这是自动为您完成的,因为您有循环。