TASMを使用しています。
このIO.hファイルをコンソールとの間の入出力に使用します。そしてまたのためitoa
にatoi
。
私のプログラムは:(目的は単に20h
2つのメモリ位置にコピーして両方を出力することです。)
include io.h
data segment
msg2 db 13, 10, "here it is", 13, 10, 0
tmp dw ?, 0
num dw ?, 0
tmp2 dw ?, 0
data ends
code segment
assume cs:code, ds:data
start:
;load segments
mov ax, data
mov ds, ax
;store 20h
mov ax, 20h
;copy to both num and tmp2
mov num, ax
mov tmp2, ax
;output
output msg2
; (itoa puts the output-able into destination, "tmp" here)
itoa tmp, tmp2
output tmp
;output
output msg2
itoa tmp, num
output tmp
;return control
mov ax, 4c00h
int 21h
code ends
end start
私が得る出力は次のとおりです:
here it is
32
here it is
12851
ただし、変数定義の順序を少し変更すると(tmp2とnumを入れ替えます):
data segment
msg2 db 13, 10, "here it is", 13, 10, 0
tmp dw ?, 0
tmp2 dw ?, 0
num dw ?, 0
data ends
出力は次のとおりです。
here it is
32
here it is
32
誰かがこれが起こる理由を説明できますか?2番目の出力は、どちらの場合も期待したものです。
ps:また、なぜstart
ラベルを使用する必要があるのですか?それがコードセグメントの外に出ているのは非常に奇妙だと思います。そのラベルがないと正しく機能しません。