繁体   English   中英

如何用汇编语言打印0、2、4、6,…?

[英]How do I print 0,2,4,6,… in assembly language?

我有一份作业要交。 系统组织 主题,不幸的是,我在汇编语言方面还是个新手。 我应该写一个程序,分别显示数字0、2、4、6、8、10。 我将如何处理?

也许这会回答我的问题:(请回答)

.model small
.stack 100H
.data
.code

call proc

mov cx,5

mov dx,0
L1:
mov bx,2
add dx,bx
mov ah,02h
loop L1
int 21
endp

去拜访您的讲师和/或导师,并寻求建议。 那就是他们在那里的目的。 你还没有给我们任何接近足够的信息来帮助你。

认为这是您的ABCD程序的外观。 我建议您将其用作尝试制作0 2 4 ...版本的基准。

    model  proc
    .stack 100H
    .data
    .call

    main   proc

    mov    cx,10     ; 10 loops only.
    mov    dx,40h    ; start dx at 'A' - 1.
L1:
    inc    dx        ; move to next character.

    mov    ah,02h    ; int 21,02 is print character.
    int    21h

    loop   L1        ; loop until cx is 0

    mov    ax,4c00h  ; int 21,4c is exit with al holding exit code.
    int    21

    endp

当您至少可以转换此代码时,请发布代码,我们将对您的工作进行评论。

如果您学到了什么,它永远不会长久,但是,如果您学到一些东西,它就会永远长久(尽管酒精会滋生脑细胞:-)。

Int 21是DOS中断,它允许汇编程序使用各种DOS函数。 从概念上讲,这是一个基于AH寄存器的巨大switch语句,这就是为什么您会看到类似Int 21 Fn 02 ,这意味着先执行mov ah,2然后执行int 21

Int 21 Fn 02将获取DL的内容并将其输出到屏幕。 所以顺序:

mov ah,02h
mov dl,41h
int 21h

将输出'A'字符(0x41)。

同样, Int 21 Fn 4c将退出当前运行的进程。

汇编语言是数字机器代码和对特定CPU(或体系结构)进行编程所需的其他常量的符号表示。 因此,Mac(最近是Intel X86)的Mac汇编语言不同于iPhone上的汇编语言-ARM。

您的老师也可能希望您认识到要使用的数字的二进制形式和用于显示在屏幕上的ASCII格式之间的区别。

您确实知道“汇编语言”有多种风味。

我确定您的班级在这里给了您一些教育。 您可以编码足够的程序集来打印一个或两个数字吗? 即使无法打印,您是否可以编写足够的代码来计算数字?

发布那么多代码,您可能会在这里找到帮助。

否则,您是在要求别人为您做功课。

您可以像打印A,B,C,D等的程序一样执行此操作:除了不是从“ A”开始,而是从“ 0”开始; 而不是每次增加1(从“ A”到“ B”),而增加2(从“ 0”到“ 2”)。

打印“ 0”,“ 2”,“ 4”,“ 6”和“ 8”后,要打印的下一个数字是“ 10”。

要打印“ 10”,可以先打印“ 1”,再打印“ 0”。 或者,您可以将ah=9设置为打印一个字符串(将ds:dx设置为包含“ 10$ ”的内存块),而不是使用ah=2调用int 21 (一次打印一个字符)。


稍后,您提出了以下解决方案并提出批评:

.model small
.stack 100H
.data
.code

main proc

call defineuser1
call defineuser2
mov cx,5

userdefine1 proc
L1:
mov dx,0
mov bx,2
add dx,bx
mov ah,02h
loop L1
int 21h
endp

userdefine2 proc
mov ah, 4ch
int 21h
userdefine2
endp

我的批评如下:

  • defineuser1不存在(我认为您的意思是userdefine1)

  • 设置cx需要在过程内部(而不是之前)

  • 调用int 21必须在循环内(而不是在循环外)

  • 如上所述,您需要对“ 10”进行特殊处理

  • '0' (ASCII字符/数字)和0 (数字)之间有区别...您需要打印字符/数字,而不是数字

  • 您需要学习测试代码(编写代码,使用调试器逐步调试并调试),最好是在发布有关代码的问题之前。

您将有一个从零开始的计数器,然后将其重复递增2,以打印结果。

.model small
.stack 100H
.code
.data
var2 DB "10$"
main proc
    mov cx,4
    mov ax,0
    mov dl,al
    add dl,30h
    mov ah,02h
    int 21h
    mov ax,0
    var1:
   add ax,2
   mov dl,al
   add dl,30h
   mov bx,ax
   mov ah,2h
   int 21h
   mov ax,bx
   loop var1
   mov ax,@data
   mov ds,ax
   mov dx,offset var2
   mov ah,09h
   int  21h
   main endp
end main    

我是计算机科学的新手,当我看到这个问题时,我只是想尝试一下。 我已经做到了,这是代码

MOV AX, 0
MOV BX, 2

ADDLOOP:
ADD AX, BX
CMP AX, 10
JE DONE
JMP ADDLOOP

DONE:

好。 那是我最好的尝试。 很多细节遗漏了。 我还应该提到,我不知道如何在屏幕上打印字符。

就像其他人提到的那样,您没有指定哪种汇编语言,所以我选择了x86。

最后,与您的讲师交谈,他们会为您提供更多帮助。

您是否正在使用宏作为输出?

应该是...

 

        mov eax, 0

myloop: cmp eax, 10 jg done output macro eax add eax, 2 jmp myloop done:

当然是8086组装的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM