Loops 要打印的汇编程序';a';至';z';使用堆栈、循环cx和dx
我的任务是制作一个汇编程序,使用堆栈、循环cx和dx逐行垂直打印“a”到“z”。 谁能帮帮我吗 这是将a打印到z的程序,但我不知道如何在程序中使用堆栈cx和dx:Loops 要打印的汇编程序';a';至';z';使用堆栈、循环cx和dx,loops,assembly,stack,Loops,Assembly,Stack,我的任务是制作一个汇编程序,使用堆栈、循环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
.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
(这是我自己制作的程序)我想你的老师想避免一个“聪明”的解决方案,比如:
.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
您应该使用循环
(需要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
在这里获得帮助的最好方法是先尝试一些东西。如果你陷入困境,做一些研究,尝试自己解决问题,然后再问一个关于你的尝试的具体问题,展示你的尝试。在没有展示研究成果的情况下,要求完整解决方案的问题通常会被否决和关闭。我必须使用stack、cx和dxI投票赞成重新开放的三个东西,因为我很清楚所问的问题。我将这样做:mov al,'a'循环:mov ah,0x0E int 0x10 mov cl,al mov al,10 int 0x10 mov al,13 int 0x10 mov al,cl inc al cmp al,'z'+1 jne环路jmp$