TASM - 注册?

时间:2013-03-14 02:18:34

标签: assembly x86 tasm

我很担心寄存器在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);
; }

我一直在努力设置寄存器中的值,因为我不知道它们是如何工作的。请向我解释我做错了什么。

2 个答案:

答案 0 :(得分:1)

你不是在这里初始化BL。你需要在内循环之前将它设置为0 INNER:


在执行中断之前,您需要在DL中添加BL,以便获得伪代码中的字符M + BL MOV DL, M
INT 21H


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


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

答案 1 :(得分: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

啊,al,bl等保持8位值

ax,bx,cx等保持16位值

eax,ebx等保持32位值