使用堆栈、循环 cx 和 dx 打印 'a' 到 'z' 的汇编程序
Assembly program to print 'a' to 'z' using stack, loop cx and dx
我有一个任务要编写一个汇编程序,它使用堆栈、循环 cx 和 dx 逐行垂直打印 'a' 到 'z'。
谁能帮帮我。
这是打印 a 到 z 的程序,但我不知道如何在我的程序中使用堆栈 cx 和 dx:
.data
l1c db 0ah,0dh,"S"
.code
main proc
mov ax @data
mov ds,ax
mov al,48
mov cx,10
d:
mov dl,al
mov ah,2
int 21h
call linechange
inc al
loop d
mov ah,4ch
int 21h
main endp
;Procedure
linechange proc
lea dx,l1c
mov ah,9
int 21h
ret
linechnage endp
end main
(这是我自己做的程序)
我猜你的老师想要避免 "clever" 解决方案,例如:
.MODEL SMALL
.STACK 1000h
.DATA
smart_out db 'a',13,10,'b',13,10,'b',13,10,'c',13,10,'d',13,10,'e',13,10
db 'f',13,10,'g',13,10,'h',13,10,'i',13,10,'j',13,10,'k',13,10
db 'l',13,10,'m',13,10,'n',13,10,'o',13,10,'p',13,10,'q',13,10
db 'r',13,10,'s',13,10,'t',13,10,'u',13,10,'v',13,10,'w',13,10
db 'x',13,10,'y',13,10,'z',13,10,'$'
.CODE
main:
mov ax, @data
mov ds, ax
mov ah, 9
mov dx, OFFSET smart_out
int 21h
mov ax, 4C00h
int 21h
END main
你应该用 LOOP
输出这个(需要 CX
)。在循环中,您至少需要保留 AX
和 CX
,因为您永远不知道 INT 21h
这样的过程是否会更改它。调用 INT 21h / 9
满足第三个条件,因为它需要 DX
:
中的值
.MODEL SMALL
.STACK 1000h ; Reserve space for stack and initialize stack pointer
.DATA
l1c db 0dh, 0ah, '$' ; Dollar-sign!
.CODE
main PROC
mov ax, @data
mov ds, ax
mov al, 'a'
mov cx, 26
d:
push ax ; Store AX (AL is a part of AX)
push cx ; Store CX
mov dl, al
mov ah, 2
int 21h
mov ah, 9
mov dx, OFFSET l1c
int 21h
pop cx ; Restore CX & AX in reversed push-order
pop ax
inc al
loop d ; Loops until cx == 0
mov ah, 4ch
int 21h
main ENDP
END main
我有一个任务要编写一个汇编程序,它使用堆栈、循环 cx 和 dx 逐行垂直打印 'a' 到 'z'。 谁能帮帮我。
这是打印 a 到 z 的程序,但我不知道如何在我的程序中使用堆栈 cx 和 dx:
.data
l1c db 0ah,0dh,"S"
.code
main proc
mov ax @data
mov ds,ax
mov al,48
mov cx,10
d:
mov dl,al
mov ah,2
int 21h
call linechange
inc al
loop d
mov ah,4ch
int 21h
main endp
;Procedure
linechange proc
lea dx,l1c
mov ah,9
int 21h
ret
linechnage endp
end main
(这是我自己做的程序)
我猜你的老师想要避免 "clever" 解决方案,例如:
.MODEL SMALL
.STACK 1000h
.DATA
smart_out db 'a',13,10,'b',13,10,'b',13,10,'c',13,10,'d',13,10,'e',13,10
db 'f',13,10,'g',13,10,'h',13,10,'i',13,10,'j',13,10,'k',13,10
db 'l',13,10,'m',13,10,'n',13,10,'o',13,10,'p',13,10,'q',13,10
db 'r',13,10,'s',13,10,'t',13,10,'u',13,10,'v',13,10,'w',13,10
db 'x',13,10,'y',13,10,'z',13,10,'$'
.CODE
main:
mov ax, @data
mov ds, ax
mov ah, 9
mov dx, OFFSET smart_out
int 21h
mov ax, 4C00h
int 21h
END main
你应该用 LOOP
输出这个(需要 CX
)。在循环中,您至少需要保留 AX
和 CX
,因为您永远不知道 INT 21h
这样的过程是否会更改它。调用 INT 21h / 9
满足第三个条件,因为它需要 DX
:
.MODEL SMALL
.STACK 1000h ; Reserve space for stack and initialize stack pointer
.DATA
l1c db 0dh, 0ah, '$' ; Dollar-sign!
.CODE
main PROC
mov ax, @data
mov ds, ax
mov al, 'a'
mov cx, 26
d:
push ax ; Store AX (AL is a part of AX)
push cx ; Store CX
mov dl, al
mov ah, 2
int 21h
mov ah, 9
mov dx, OFFSET l1c
int 21h
pop cx ; Restore CX & AX in reversed push-order
pop ax
inc al
loop d ; Loops until cx == 0
mov ah, 4ch
int 21h
main ENDP
END main