WangShuangによる「AssemblyLanguageThirdEdition」------読書ノート
6.1コードスニペットでデータを使用する
仕様の観点から、システムはメモリスペースを割り当てる必要があります。
疑似アセンブリ命令(コンパイラによって認識されます)
db:バイトタイプ変数を定義します
プログラム
assume cs:code
code segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h'
start: mov bx,0
mov ax,0
mov cx,8
s:add ax,cs:[bx]
add bx,2
loop s
mov 4c00h
int 21h
code ends
end start
実行可能プログラム
説明情報と 手順で 構成されてい ます 、
記述情報:これは主に、プログラムをコンパイルおよびリンクして、ソースプログラム内の関連する疑似命令を処理することによって取得される情報です。
プログラム:ソースプログラムからのアセンブリ命令と定義済みデータ。
疑似命令終了の役割
プログラムの終了をコンパイラに通知することに加えて、endは、プログラムのエントリがどこにあるかをコンパイラに通知することもできます。
例:end startは、プログラムのエントリがラベルstartにあり、ラベルstartがアドレスであることを示します。
コンパイルしてリンクした後、「endstart」で指定したプログラムエントリがエントリアドレスに変換されます。
実行可能ファイルの記述情報に格納されます
プログラムがメモリにロードされると、ローダーはプログラムの実行可能ファイルの説明情報からプログラムのエントリアドレスを読み取ります。
CS:IPを設定する
結局のところ、フレームワークプログラムを手配することができます
assume cs:code
code segment
...数据...
start:
...代码...
code ends
end start
6.2コードセグメントでスタックを使用する
第3章スタックの知識ポイントを確認します
6.3データ、コード、スタックを異なるセグメントに配置する
理由:
1)同じセグメントに配置すると、プログラムが混沌としているように見えます
2)8086モードでは、セグメントの容量は64KBのプログラムフレームを超えることはできません。
assume cs:code
data segment
dw 0123h,0456h
data ends
stack segment
dw 0,0,0,0
stack ends
code segment
start: 第一条命令
code ends
end start