📌  相关文章
📜  8086程序,用于查找给定序列中的奇数和

📅  最后修改于: 2021-06-28 16:51:53             🧑  作者: Mango

问题–编写汇编语言程序以查找给定系列中包含连续存储位置中存储的8位数字的奇数和,并将结果存储在另一个存储位置中。

例子 –

示例说明–

  1. 500偏移量存储系列的计数器值,并且该系列的元素从501到504偏移量开始。
  2. 在此示例中,我们只有4个术语。将奇数项(在BL寄存器中找到)加到AL寄存器中的15 + 07,结果存储在(1C)AL寄存器中。
  3. AL寄存器的结果存储在600偏移量中。

假设–

  1. 告诉该系列中有多少个数字的计数器值存储在存储位置500中。
  2. 系列的元素存储在从501开始的连续存储位置中。
  3. 结果存储在存储位置600中。
  4. 该程序的起始地址为400。

测试 –

Syntax: TEST d, s 

它执行目标(d)和源(s)的AND操作,但结果仅存储修改后的标志而不会存储。

算法 –

  1. 从偏移500加载数据到寄存器CL。
  2. 增加偏移量的值。
  3. 将00H装入CH寄存器。
  4. 将00H装入AL寄存器。
  5. 将数据从偏移量加载到寄存器BL。
  6. 使用TEST指令检查BL中的数据是偶数还是奇数,如果设置了零标志,则表示数据为偶数,然后转到步骤7;否则,数据为奇数,然后转到步骤8。
  7. 跳转到内存位置413H。
  8. 将AL和BL寄存器的数据相加并将结果存储在AL寄存器中。
  9. 增加偏移量的值。
  10. 如果CX的内容不等于零,则跳转到内存位置40AH,否则转到步骤11。
  11. 将数据从AL寄存器加载到存储位置600。
    1个
  12. 结尾

程序 –

Address Mnemonics Comments
400 MOV SI, 500 SI<-500
403 MOV CL, [SI] CL<-[SI]
405 INC SI SI<-SI+1
406 MOV CH, 00 CH<-00
408 MOV AL, 00 AL<-00
40A MOV BL, [SI] BL<-[SI]
40C TEST BL, 01 BL.01
40F JZ 413 Jump to 413 memory location if zero flag is set
411 ADD AL, BL AL<-AL+BL
413 INC SI SI<-SI+1
414 LOOP 40A jump to 40A memory location if content of CX is not equal to zero
416 MOV [600], AL [600], AL
41A HLT end

解释 –

  1. MOV SI,500将值500加载到SI。
  2. MOV CL,[SI]将偏移量SI的数据加载到CL寄存器中。
  3. INC SI将SI的值增加一。
  4. MOV CH,00将值00加载到CH寄存器中。
  5. MOV AL,00将值00加载到AL寄存器中。
  6. MOV BL,[SI]将偏移量SI的数据加载到BL寄存器中。
  7. 测试BL,01和BL的内容以及值01和标志寄存器的操作进行了修改。
  8. 如果设置了零标志,则JZ 413跳转到413存储位置。
  9. 添加AL,BL将AL和BL寄存器的内容相加,并将结果存储在AL寄存器中。
  10. INC SI将SI的值增加一。
  11. 如果CX的值不为零,则LOOP 40A跳至40A存储器位置。
  12. MOV [600],AL将AL寄存器的内容加载到存储位置600。
  13. HALT结束