0

我很困惑寄存器如何在 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);
; }

我一直在尝试在我的寄存器中设置值时遇到麻烦,因为我不知道它们是如何工作的。请向我解释我做错了什么。

4

2 回答 2

1

您没有在这里初始化 BL。您需要在内部循环之前将其设置为 0
INNER:


这里你需要在执行中断之前将BL添加到DL,这样你就得到了伪代码中的字符M+BL。
MOV DL, M
INT 21H


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


这恰好适用于您的情况,但为了正确起见,它确实应该是 JMP 而不是 JNE。你已经在循环的前面有一个条件退出,所以这个应该是一个无条件的跳转。
JNE INNER

于 2013-03-14T06:54:41.107 回答
0

试试这个链接:x86 Assembly Reference Sheet

没有更具体的问题,这里有一些基础知识。抱歉没有教程的链接,这是记忆中的,如果您有任何具体问题,请告诉我,并会更新

; 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 位值

于 2013-03-14T02:28:44.593 回答