📜  8086程序,用于确定n个数字数组中的最大数字

📅  最后修改于: 2021-06-28 17:03:25             🧑  作者: Mango

问题–在8086微处理器中编写一个程序,以找出8位n个数字中最大的一个,其中大小“ n”存储在内存地址2000:500中,数字从内存地址2000:501存储并存储结果(最大)编号)到内存地址2000:600中。

例子 –

算法 –

  1. 将数据从偏移量500加载到寄存器CL并将寄存器CH设置为00(用于计数)。
  2. 将下一个偏移量(即501)中的第一个数字(值)加载到寄存器AL中,并将计数减1。
  3. 现在将寄存器AL的值与下一个偏移量的数据(值)进行比较,如果该数据大于寄存器AL的值,则将寄存器AL的值更新为该数据,否则保持不变,并为下一个比较将偏移量值增加,并将计数减少1并继续进行直到计数(寄存器CX的值)变为0。
  4. 将结果(寄存器AL的值)存储到内存地址2000:600。

程序 –

MEMORY ADDRESS MNEMONICS COMMENT
400 MOV SI, 500 SI<-500
403 MOV CL, [SI] CL<-[SI]
405 MOV CH, 00 CH<-00
407 INC SI SI<-SI+1
408 MOV AL, [SI] AL<-[SI]
40A DEC CL CL<-CL-1
40C INC SI SI<-SI+1
40D CMP AL, [SI] AL-[SI]
40F JNC 413 JUMP TO 413 IF CY=0
411 MOV AL, [SI] AL<-[SI]
413 INC SI SI<-SI+1
414 LOOP 40D CX<-CX-1 & JUMP TO 40D IF CX NOT 0
416 MOV [600], AL AL->[600]
41A HLT END

解释 –

  1. MOV SI,500 :将SI的值设置为500
  2. MOV CL,[SI] :将数据从偏移量SI加载到寄存器CL
  3. MOV CH,00 :将寄存器CH的值设置为00
  4. INC SI :将SI的值增加1。
  5. MOV AL,[SI] :从偏移量SI到寄存器AL的加载值
  6. DEC CL :寄存器CL的值减1
  7. INC SI :SI的值增加1
  8. CMP AL,[SI] :比较寄存器AL和[SI](AL- [SI])的值
  9. JNC 413 :如果未生成进位则跳转到地址413
  10. MOV AL,[SI] :将偏移SI处的数据传输到寄存器AL
  11. INC SI :SI的值增加1
  12. LOOP 40C :如果寄存器CX的值不为零,则将寄存器CX的值减1并跳转到地址40D
  13. MOV [600],AL :将寄存器AL的值存储到偏移600
  14. HLT :停止