Assembly TASM-寄存器?

Assembly TASM-寄存器?,assembly,x86,tasm,Assembly,X86,Tasm,我很困惑寄存器在TASM或汇编中是如何工作的。特别是在其中指定整数值时。我真的找不到清晰的教程 有人能给我解释一下这些寄存器的用法吗: AX, BX, CX, DX, AH AL, BL BH, CL CH, DL DH 我看到一个使用CX作为循环计数器的程序。我是否可以同时将其用作某个整数值的主机 老实说,我心里有很多问题。我甚至不知道如何在x86中执行加法和减法 我们的教授真的没有给我们任何参考资料。我们甚至没有被教如何在装配中进行数学运算。在课堂上,我们只会得到简短解释的代码(比如代码

我很困惑寄存器在TASM或汇编中是如何工作的。特别是在其中指定整数值时。我真的找不到清晰的教程

有人能给我解释一下这些寄存器的用法吗:

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);
; }
我一直很难在寄存器中设置值,因为我不知道它们是如何工作的。请向我解释我做错了什么。

请尝试以下链接:

如果没有更具体的问题,下面是一些基础知识。很抱歉,没有教程的链接,这是从内存中获取的,如果您有任何具体问题,请告诉我,并将更新

; assign 100 to ax (16 bit)
mov ax, 100

; add ax to bx
add bx,ax

; add to ax, memory refereced by dx
add ax,[dx]

; add 8 bit 100 to al
add al, 100
ah、al、bl等保存8位值

ax、bx、cx等保存16位值


eax、ebx等保留32位值

此处不初始化BL。您需要在内部循环之前将其设置为0
内部:


在这里,您需要在执行中断之前将BL添加到DL,以便获得伪代码中的字符M+BL。
MOV-DL,M

int21h


应删除此代码,因为它将打印字符7-CL(即“垃圾”)。
MOV-DL,AL

int21h


在您的情况下,这正好可以工作,但为了正确性,它实际上应该是一个JMP而不是JNE。您在循环的前面已经有一个条件退出,因此这应该是一个无条件跳转。

JNE-INNER

我正在尝试在程序集中创建一个嵌套循环。我试过这个原理,请看一下我的程序。我更新了我的问题让你看。是否可以使用不同值的Cx两次?如果一个使用xchg Cx,bx在退出内部循环时切换Cx寄存器的内容,则可以使用两个带循环指令的嵌套循环。(并使用bx作为外循环计数器)。回答您的一个问题:否,寄存器在任何时候只能保存一个值。您打算从这段代码开始讨论多少主题?这使得3看起来您在外循环结束时没有减少CL?我认为每个循环将
CX
减少1?所以
CL
不等于
CX
@枪手我真的必须尽快完成这件事,否则我的科目就会不及格。对不起。
ax
bx
cx
dx
al
ah
bl
bh
cl
ch
dl
dh
都是通用寄存器,其中一些函数特定于一个寄存器。参见示例(在谷歌搜索的第一个结果中:注册使用x86汇编)。您可以使用这里提到的:“rep lodsb”或“rep stosb”:自动减少cx,但我不认为这是因为您有一个循环而自动完成的。它应该是
BL
而不是
AL
。我想我快疯了。因此,我在
movdl,M
int21h
之后添加了
movdl,BL
int21h
请查看我更新的帖子,我似乎得到了一个不同的输出,带有笑脸字符和心形。但现在,它是以金字塔的形式出现的,我希望这是一种改进?我引用自己的话:“你需要将BL添加到DL中。”。
MOV
ADD
不同。对不起。我一定是看错了。这一天对我来说压力太大了。编辑:神圣的烟雾之母!非常感谢。