第VII章&アセンブリ言語実験6
7.1とし、または命令
そして、命令、および論理命令はビット単位を実行し、
mov al,01100011B
and al,00111011B
アル= 00100011Bを実行した後、ビットに対応する操作対象の指示により他のビットは変更されずに、0に設定されてもよいです
または命令、ロジックまたは命令、ビットごとのOR演算
mov al,01100011B
or al,00111011B
アル= 01111011Bを実行した後、ビットに対応する操作対象の指示により他のビットは変更されずに、1に設定されてもよいです
7.2 ASCIIコードについて
私たちは、コンピュータに格納されている情報を入れて、それはそれはバイナリ情報にエンコードされ、情報が私たちにコンピュータディスプレイに保存される必要があり、それがデコードする必要があり、ASCIIコードは、符号化方式があります
メモリ61Hに記憶されたコンピュータコードにテキストキーを押すと、このキー情報の着信PCを、編集している場合、メモリから取得したソフトウェアを編集61Hのテキストは、それがテキストで、ビデオカード上のメモリに作品を送っていますグラフィクスモードが、ASCIIコードの規則を説明するために使用されるディスプレイメモリの内容は、61Hを文字として処理され、ディスプレイグラフィックス・イメージを駆動文字が画面上に描画します
7.3データは文字に与えられました
アセンブラでは、「...」方法に対応するASCIIコードに変換するコンパイラによって与えられた形で文字データを指定
assume cs:code,ds:date
data segment
db 'unIX'
db 'foRK'
data ends
code segment
start: mov al,'a'
mov bl,'b'
mov ax,4c00h
int 21h
code ends
end start
デシベル 'UNIX' 同等 'デシベルの75H、6EH、49H、58H'
MOVら、 'A' 相当MOVら、61H
7.4の場合の変換の問題
最初の文字列は、大文字datasgに小文字に2番目の文字列に変換されます
[チェーンが失敗した外に、ソースステーションは、画像を保存することが推奨され、セキュリティチェーン機構を有していてもよいピクチャー・ダンプが直接ダウン(IMG-awc0M48Y-1583139213436)(Cアップロード:\ Users \ユーザーTianmingハオ\のAppData \ローミング\ Typora \ typora-ユーザーの画像を\画像20200302130808763.png)]
最初20Hに対応する大きな大文字のASCII値より法、観測小文字のASCII値が、小文字の文字列による大文字有する両方が、必要な大文字または小文字かどうかを判断するが、学習していません判断を使用して、ステートメントのコンパイル
ASCIIコードバイナリ形式の観点から、第二の方法は、ビット5(0から数えて)を除いて、他のビットが同じであるので、文字のためにかかわらず、大文字小文字の、最初の5位がゼロであることができます
assume cs:codesg,ds:datasg
datasg segment
db 'BaSiC'
db 'iNdOrMaTiOn'
datasg ends
codesg sgement
start: mov ax,datasg
mov ds,ax
mov bx,0
mov cx,0
s:mov al,[bx]
and al,11011111B
mov [bx],al
inc bx
loop s
mov bx,5
mov cx,11
s0:mov al,[bx]
or al,00100000B
mov [bx],al
inc bx
loop s0
mov ax,4c00h
int 21h
codesg ends
end start
7.5 [BX +データ]
メモリセルは、+ IDATAアドレス(BX)オフセットれ、[BX + IDATA]によって表すことができます。
次の命令は同等です
mov ax,[bx+200]
mov ax.[200+bx]
mov ax,200[bx]
mov ax,[bx].200
7.6 [BX + IDATA]方法とアレイ処理
充填コードcodesg、定義datasg大文字に第一列、第二に小文字の文字列
元の方法は、2つのサイクルを必要とするが、同じ周期でで完了することができます
assume cs:code,ds:datasg
datasg segment
db 'BaSiC'
db 'MinIX'
datasg ends
codesg segment
start: mov ax,datasg
mov ds,ax
mov bx,0
mov cx,5
s:mov al,[bx]
and al,11011111B
mov [bx],al
mov al,[5+bx]
or al,00100000B
mov [5+bx],al
inc bx
loop s
mov ax,4c00H
int 21H
codesg ends
end
Cおよびアセンブリ言語の比較
C:[I]、B [i]は
コンパイル:0 [BX]、5 [BX]
YOU OF 7.7和
8086CPUのSIとDIは機能に類似しており、SIをBXレジスタ、およびジを使用することができない2つの8ビットレジスタに分割されています
命令の3同じセット次の機能
mov bx,0
mov ax,[bx]
mov si,0
mov ax,[si]
mov di,0
mov ax,[di]
そのデータ領域にディSIと文字列を実装している「MASMへようこそ!」のコピーバック
assume cs:codesg,ds:datasg
datasg segment
db 'welcome to masm!'
db '................'
datasg ends
codesg sgement
start: mov ax,datasg
mov ds,ax
mov si,0
mov cx,8
s:mov ax,0[si]
mov 16[si],ax
add si,2
loops
mov ax,4c00h
int 21h
codesg ends
end start
7.8 [BX + SI]和[bx_di]
[たBx +ジ】すなわちオフセットアドレス(BX)+(SI)
次の命令は同等です
mov ax,[bx+si]
mov ax,[bx][si]
7.9 [+ BX + IDATAある]和[+ IDATAのBX +]
[たBx + SI + IDATA]即(X)+(YES)+ IDATA
一般的なフォーマット
mov ax,[bx+si+200]
mov ax,[bx+200+si]
mov ax,[200+bx+si]
mov ax,200[bx][si]
mov ax,[bx].200[si]
mov ax,[bx][si].200
アドレッシングの異なる方法の7.10柔軟なアプリケーション
大文字にdatasg段落内の各単語の最初の文字
assume cs:codesg,ds:datasg
datasg segment
db '1. file ' ;每个字符串长度为16个字节,因为连续存放
db '2. edit ' ;加空格保证两个字符串不在同一个段中
db '3. search '
db '4 .view '
db '5. options '
db '6. help '
datasg ends
codesg segment
start: mov ax,datasg
mov ds,ax
mov bx,0
mov cx,6
s:mov al,[bx+3]
and al,11011111B
mov [bx+3],al
add bx,16
loops
mov ax,4c00h
int 21h
codesg ends
end start
アルファベット大文字datasgにおける各単語のセグメント、我々は二つの重サイクルを使用しなければならないが、使用CX 2サイクルでなければならないので、それは一時レジスタの一時的な値をCX必要外側ループでは使用されるが、一般的にすることができますたとえば、データの一時記憶を必要なときに、私たちは、スタックを使用する必要があります
assume cs:codesg,ds:datasg,ss:stacksg
datasg segment
db 'ibm '
db 'dec '
db 'dos '
db 'vax '
datasg ends
stacksg segment
dw 0,0,0,0,0,0,0,0 ;定义一共栈段,容量为16个字节
stacksg ends
codesg segment
start: mov ax,stacksg
mov ss,ax
mov sp,16
mov ax,datasg
mov ds,ax
mov bx,0
mov cx,4
s0:push cx ;外层循环的cx压栈
mov si,0
mov cx,3
s:mov al,[bx+si]
and al,11011111B
mov [bx+si],al
inc si
loops
add bx,16
pop cx
loop s0
mov ax,4c00h
int 21h
codesg ends
end start
第六実験
プログラム、大文字にdatasg段落内の各単語の最初の4つの文字
assume cs:codesg,ss:stacksg,ds:datasg
stacksg segment
dw 0,0,0,0,0,0,0,0
stacksg ends
datasg segment
db '1. display '
db '2. brows '
db '3. replace '
db '4. modify '
datasg ends
codesg segment
start: mov ax,stacksg
mov ss,ax
mov sp,16
mov ax,datasg
mov ds,ax
mov bx,0
mov cx,4
s0:push cx
mov si,3
mov cx,4
s0:push cx
mov si,3
mov cx,4
s:mov al,[bx+si]
and al,11011111B
mov [bx+si],al
inc si
loop s
pop cx
add bx,16
loop s0
mov ax,4c00h
int 21h
codesg ends
end start