2 つの引数を受け取るプロシージャを作成する必要があります: (スタック上):
文字列のオフセット - バイト配列。
文字列の長さ。
ローカル変数を作成し、文字列を変数にコピーする必要があります。
それでは印刷してみます。うまくいきません。
.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
いくつかの「ランダムな」値を出力します。理由はわかりますか?