アセンブリ言語は、配列要素の追加を実現します

1つのコード実装

DATA SEGMENT
ARRAY1  DB  2,5,0,3,-4,5,0,0AH,0FH
ARRAY2  DB  3,5,4,-2,0,8,3,-0AH,20H
COUNT   DB   $-ARRAY2
LEN      DB    ?
SUM      DB     20H  DUP(0)
DATA   ENDS
STACK1 SEGMENT PARA STACK 'STACK'
          DW   20H   DUP(0)
STACK1  ENDS
CODE   SEGMENT
       ASSUME CS:CODE,DS:DATA,SS:STACK1
START: MOV AX,DATA;把数据段传给AX
       MOV DS,AX;AX进堆栈
MOV BX,-1;初始化BX为-1,是数组从第一个元素开始处理
MOV CX,0;清零CX
MOV CL,COUNT  ;把数组的长度传给CL
NOZERO: INC BX;增量指令,是BX加一处理下一个数组元素
         MOV  AL,ARRAY1[BX];把数组1的元素传给AL
         ADD  AL, ARRAY2[BX];令数组2与数组1对于的元素相加
         MOV   SUM [BX],AL;把相加的结果传给SUN[BX]
         LOOPNE  NOZERO;循环执行,直到处理完数组的所有元素
         JE   ENDO;循环结束,调到ENDO语句
INC  BL;增量指令
ENDO:  MOV LEN,BL;把BL统计的相加后的数组长度传给LEN
       MOV AH,4CH;返回DOS
       INT 21H;停机
CODE   ENDS
 END  START

最初のループを確認します
ここに写真の説明を挿入
。001Cが次のループの開始判定ステートメント
ここに写真の説明を挿入
であることがわかります。g= 0000 001Cと入力して、2つの配列の最初の要素を追加した結果である最初のループAL = 05が正しいことを確認します。
ここに写真の説明を挿入
配列1、2の論理アドレスは0000、追加された配列は0010であり、結果はそれぞれ05、0A、04、01、FC、0D、03、00であると推測できます。ZF = 1の場合、サイクルは終了します。

2. DebugU
コマンド
ここに写真の説明を挿入
次のデバッグ操作の各ステートメントのアドレスを確認できます。

gコマンドの最初のサイクルを確認します
ここに写真の説明を挿入
.g = 0000 001Cと入力して、2つの配列の最初の要素を追加した結果である最初のサイクルAL = 05が正しいことを確認します。

Rコマンドの最初のサイクルであるサイクルは終了していません。この時点でZFフラグはNE、つまりZF = 0であり、サイクルは継続します。
ここに写真の説明を挿入
サイクルが終了すると、ZFフラグはZR、つまりZF = 1であり、LOOPNEの特性を満たし、正しいです。
ここに写真の説明を挿入
Dコマンド
ここに写真の説明を挿入
は、配列1、2の論理アドレスが0000、追加された配列が0010であると推測でき、結果はそれぞれ05、0A、04、01、FC、0D、03、00です。対応する小冊子は5,10,4,1、-4,13,3,0です。ZF = 1の場合、サイクルは終了します。結果は現実と同じであり、結果は正しいです。

おすすめ

転載: blog.csdn.net/weixin_43789635/article/details/112981782
おすすめ