データ処理の二つの基本的な問題

データ処理コンピュータ、コンピューティング・マシン、2つの問題があります。

  1. 位置データを処理
  2. プロセスデータの長さ

これら2つの問題は、これらの計算は、機械語命令では動作しませんか、(、時には明示時々暗黙の)指示を与えなければなりません。
シンボルの記述定義:

  • REG(登録):斧、BX、CX、DX、ああ、アル・··SP、BP、SI、ジ
  • SREG(セグメント・レジスタ):DS、SS、CS、ES

BX、SI、DIとBP

要約:

  1. 8086で、唯一のこれらの4つのレジスタを使用することができ[...]、メモリのアドレス指定のために。
  2. では[...]、彼らが個別に存在することができ、またはそれらの組み合わせで表示されます(組み合わせは、他のレジスタである必要がありますが、Idataのを持つことができます)
  3. SSにおける塩基対セグメントのデフォルトのアドレス(及びBX、SI、ジDS異なります)

任意の場所にデータ処理機械命令

データ処理は、次の3つのカテゴリに分けることができる:読み取り、書き込み、操作
内部のCPU、メモリ、ポート:命令が実行される前に、データは3ヶ所で処理することができます
UTOOLS1560169885399.png

アセンブラ言語表現データの場所

  1. 即時(Idataが)
    として知られているアセンブリ言語に機械語命令で直接データ(先行命令バッファCPUで実行される)を含む、の即時(Idataが)
  2. 登録
    命令レジスタに格納され処理されるデータを、対応するレジスタ名が与えられました
  3. セグメントアドレス(SA)とオフセットアドレス(EA)
    メモリ内のデータ、SA + EAによって与えられる位置データ

アドレッシング

メモリセル方式を位置づけ、それがアドレッシングと呼ばれています
UTOOLS1561201400616.png

どのくらいの命令データが処理されます

フロントが与え所与暗黙的および明示的に分割され、例えば、レジスタ及びプッシュ、ポップ等によって暗黙的に与えられています。
明示的にデータ長を指定することはできません追加、それは長さが与えられた明示的なデータが必要です。明示的なデータ長の方法を与えているptr、例えば、命令:

mov word ptr ds:[0], 1
mov byte ptr ds:[0],1
inc ...
add ...

DIV命令

DIV命令が除算命令で
被除数/除数=残余リスト......

  1. 除数:8ビットおよび16ビット(バイト、ワード)の2種類があり、又はREGのメモリセル
  2. 配当:デフォルトDXまたはAXと除数、被除数は、16と比較して8ビットに入れ斧、デフォルトに格納さ斧。除数のビット16は、下位16ビットAXを格納する32ビットの被除数、DX高いストレージ16と比較した場合。
  3. 結果:除数が8である、アルストレージプロバイダは、ああ残りを格納します。除数は16、ストレージプロバイダAX、DXストア余りある場合。

DDディレクティブ

有用なのは、たとえば、DB、およびDWに行きました:

db 1 ;占1个字节
dw 1 ;占1个word(2个字节)

ddはDWORD(ダブルワード、ジェミニ)を定義するために使用されます。dd 12ワード(4バイト)を占めます。

後に

DUP演算子は、コンパイラによって識別されるデータを定義するために使用されます。そして、DBは、DW、繰り返し定義データのために、使用してddを。
例えば:
DB DUP 3(0)。
DB DUP 3(0,1,2)。
DB DUP 3( 'ABC'、 'ABC')。

実験7

答え

assume cs:code, ds:data, es:table

data segment
 db '1975', '1976', '1977', '1978', '1979', '1980', '1981', '1982', '1983'
 db '1984', '1985', '1986', '1987', '1988', '1989', '1990', '1991', '1992'
 db '1993', '1994', '1995'
 ; 21年, 4*21=84个字节

 dd 16, 22, 382, 1356, 2390, 8000, 16000, 24486, 50065, 97479, 140417, 197514
 dd 345980, 590827, 803530, 1183000, 1843000, 2759000, 3753000, 4649000, 5937000
 ; 21年每年总收入,84字节

 dw 3, 7, 9, 13, 28, 38, 130, 220, 476, 778, 1001, 1442, 2258, 2793, 4037, 5635, 8826
 dw 11542, 14430, 15247, 17800
 ; 21年每年雇佣人数, 42字节

data ends

table segment
 db 21 dup ('year summ ne ?? ')
table ends

stack segment
 dw 16 dup(0)
stack ends

code segment
start:
 mov ax, data
 mov ds, ax

 mov ax, table
 mov es, ax

 mov bx, 0
 mov si, 0
 mov di, 0

 mov cx, 21
s0:
 mov ax, 0[bx].[0] 
 mov es:[si].[0], ax
 mov ax, 0[bx][2]
 mov es:[si].[2], ax

 mov ax, 84[bx].[0]
 mov es:[si].[5], ax
 mov ax, 84[bx][2]
 mov es:[si].[7], ax

 mov ax, 168[di].[0]
 mov es:[si].[10], ax

 mov ax, es:[si].[5] ; 计算人均收入
 mov dx, es:[si].[7]
 div word ptr es:[si].[10]
 mov es:[si].[13], ax 

 add bx, 4
 add si, 10H
 add di, 2
 loop s0

 mov ax, 4c00H
 int 21H

code ends

end start

DUP表21はまた、空間を満たす位置に対応する、* 16バイトの実際のセグメントを定義します。





おすすめ

転載: www.cnblogs.com/freesfu/p/11070057.html