演習1:siから始まる3ワードのユニットには、符号なしの数値があり、これらの3つの数値を加算する必要があり、結果は次のユニットに格納されます。
重要:これは符号なしの数値であることに注意してください。加算中、CFがキャリーを生成している限り、オーバーフローが発生します。
DATA SEGMENT BUF DW XXH、YYH、ZZH SUM DW?、? データ終了 コードセグメントの 仮定CS:CODE、DS:DATA 開始:MOV AX、DATA MOV DS、AX LEA SI、BUF LEA DI、SUM MOV AX、[SI] ADD AX、[SI + 2 ] MOV [DI]、AX MOV AX、0 ADC AX、O MOV [DI + 2 ]、AX MOV AX、[DI] MOV AX、[SI + 4 ] MOV [DI]、AX ADC [DI + 2 ]、0 MOV AH、4CH INT 21H 代金引換終了 終了開始
演習2:アドレスオフセット100Hから開始して、それぞれ00H、01H、02Hまで256ユニットを書き込むプログラムを作成してみてください。。。。、FFH。
LOOPサイクルを選択します。
データセグメント ORG 100H BUF1 DB 256 DUP(? ) COUNT EQU $ - BUF1 DATA ENDS STKのセグメントSTACK DB 100 DIP(? ) STK ENDS コードセグメントは、 CSを想定:CODE、DS:DATA、SS:STK START:MOV AX、データ MOV DS、AX MOV SI、OFFSET BUF1 MOV CX、COUNT XOR AL、AL NEXT:MOV [SI]、AL INC AL INC SI LOOP NEXT MOV AH 4CH INT 21H CODE ENDS END START
演習3:上記のデータブロックに書き込まれた要素の0要素、正の数、および負の数を数え、上記のデータブロックの最後の3ユニットに同じi結果を書き込みます。
セグメントデータ ORG 100H BUF1のDB 00H、01H、02H ,,, FFH、私たちは今定義すると COUNT EQU $を - BUF1 DB 3 DUP(? ) データENDS STKのセグメントSTACK DB 100 DIP(? ) STK ENDS コードセグメント 引き受けるCS:CODE 、DS:DATA、SS:STK START:MOV AX、DATA MOV DS、AX MOV SI、OFFSET BUF1 MOV CX、COUNT XOR BX、BX;正および負の XOR DH、DHを格納するために使用、負の NEXT2 を格納するために使用: MOV AL、[SI] CMP AL、0 JZ ZERO JS NEGAT INC BL JMP NEXT3 ZERO:INC DH NEGAT:INC BH NEXT3:INC SI LOOP NEXT2 MOV [SI]、DH INC SI MOV [SI]、BX MOV AH 4CH INT 21H コード終了 END START
演習4:STRG1から始まる128ユニットの内容をSTRG2から始まるユニットに転送します。
通常、プログラムを構築するためにLOOPループ構造を選択しますが、MOVSB move stringコマンドもこれに使用できます。
データセグメント STRG1 DB XXH、XXH、XXH ,,,, XXH SOUNT EQU $ - STRG1 STRG2 DB 128 DUP(? ) DDATA ENDS コードセグメントは、 CSを想定:CODE、DS:DATA START:MOV AX、データ MOV DS、AX MOV SI 、オフセットSTRG1 LEA DI、STRG2 MOV CX、COUNT CLD REP MOVSB MOV AH、4CH INT 21H コード終了 END START
続きます、続きます...