Цикл Loop в сборщике, от 0 до 9?

Хорошие, я должен делать цикл в языке ассемблера от 1 до 10, которые показывали бы числа, уже цикл это у меня есть, но я не знаю, как делать прерывание для того, чтобы он показал числа на экране, цикл - следующий:

Assembly

.model small
.stack
.data
.code
    PAGE 60,132
    TITLE EJLOOP (EXE) ilustración de LOOP
    ; ----------------------------------------…
    ORG 100H
    BEGIN PROC NEAR
        MOV AX,01 ; iniciación de AX
        MOV BX,01 ; BX y
        MOV DX,01 ; DX a 01
        MOV CX,10 ; iniciar
        A20: ; número de iteraciones
        LOOP A20 ; decrementar CX
        ; iterar si es diferente de 0
        MOV AX, 4C00H ; salida a DOS
        INT 21H
    BEGIN ENDP ; fin de procedimiento
.exit
end

Но поскольку я делаю прерывание, чтобы показывать числа???? Спасибо!

2
задан 24.03.2017, 16:20
1 ответ

В assembler есть большие способы делать loops поскольку который ты желаешь, самым основным мог бы быть jump, сочетаемый с использованием этикеток.

Например:

MOV CL, 10
ETIQUETA1:
<LO-QUE-QUIERAS-HACER-DENTRO-DEL-LOOP>
DEC CL
JNZ ETIQUETA1

(JNZ значит Jump if not zero)

Но также ты можешь использовать решение loop, немного как:

LOOP ETIQUETA1

И ETIQUETA1 он будет содержать код, который ты захочешь выполнить внутри loop. Здесь нет счетчика, потому что решение loop пойми, что вышеупомянутый счетчик - реестр ECX, так что более полный пример мог бы быть таким:

mov ECX,10
ETIQUETA1:
<LO-QUE-QUIERAS-HACER-DENTRO-DEL-LOOP>
loop ETIQUETA1

Функциональный пример, который печатает числа 1 в 9, пошел бы так:

section .text
   global _start        ;must be declared for using gcc

_start:                 ;tell linker entry point
   mov ecx,10
   mov eax, '1'

l1:
   mov [num], eax
   mov eax, 4
   mov ebx, 1
   push ecx

   mov ecx, num        
   mov edx, 1        
   int 0x80

   mov eax, [num]
   sub eax, '0'
   inc eax
   add eax, '0'
   pop ecx
   loop l1

   mov eax,1             ;system call number (sys_exit)
   int 0x80              ;call kernel
section .bss
num resb 1

Ты можешь искать больше на mov и прерывания (или инструкции).

Я надеюсь, что он подает тебя.

3
ответ дан 24.11.2019, 13:14