アセンブリ言語(王シュアン)第VII章&第六実験

第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

公開された84元の記事 ウォン称賛7 ビュー10000 +

おすすめ

転載: blog.csdn.net/weixin_43569916/article/details/104614846