я должен создать процедуру, которая принимает два аргумента: (на стеке):x86 Assembly - Как скопировать строку в локальную (стек) переменную?
offest строки - массив байтов.
Длина строки.
Мне нужно создать локальную переменную и скопировать строку в переменные.
Затем я пытаюсь распечатать его. он не работает.
.model small
.stack 64
.data
str1 db "Hello world$"
len dw $-str1
.code
print proc
push bp ; save bp
mov bp, sp
mov cx, [bp+4]
mov di, [bp+2]
mov ah, 02
do1:
mov dl, ss:[si]
int 21H
inc si
loop do1
pop bp
ret 4
endp print
cpy proc
mov bp, sp
mov si, [bp+2] ; string's offset
mov cx, [bp+4] ; string's length
sub sp, cx ; create cx'th byte array
mov di, sp
do:
mov ax, [si]
mov [di], ax
inc si
inc di
loop do
add sp, [bp+4] ; restore stack
; print
push len
push sp
call print
ret 4
endp cpy
start:
mov ax, @DATA
mov ds, ax
push len
push offset str1
call cpy
mov al, 0
mov ah, 4ch
int 21H
end start
Он печатает некоторые «случайные» значения. вы знаете, почему?