问题–在8086微处理器中编写一个程序,以找出8位n个数字中最大的一个,其中大小“ n”存储在内存地址2000:500中,数字从内存地址2000:501存储并存储结果(最大)编号)到内存地址2000:600中。
例子 –
算法 –
- 将数据从偏移量500加载到寄存器CL并将寄存器CH设置为00(用于计数)。
- 将下一个偏移量(即501)中的第一个数字(值)加载到寄存器AL中,并将计数减1。
- 现在将寄存器AL的值与下一个偏移量的数据(值)进行比较,如果该数据大于寄存器AL的值,则将寄存器AL的值更新为该数据,否则保持不变,并为下一个比较将偏移量值增加,并将计数减少1并继续进行直到计数(寄存器CX的值)变为0。
- 将结果(寄存器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 |
解释 –
- MOV SI,500 :将SI的值设置为500
- MOV CL,[SI] :将数据从偏移量SI加载到寄存器CL
- MOV CH,00 :将寄存器CH的值设置为00
- INC SI :将SI的值增加1。
- MOV AL,[SI] :从偏移量SI到寄存器AL的加载值
- DEC CL :寄存器CL的值减1
- INC SI :SI的值增加1
- CMP AL,[SI] :比较寄存器AL和[SI](AL- [SI])的值
- JNC 413 :如果未生成进位则跳转到地址413
- MOV AL,[SI] :将偏移SI处的数据传输到寄存器AL
- INC SI :SI的值增加1
- LOOP 40C :如果寄存器CX的值不为零,则将寄存器CX的值减1并跳转到地址40D
- MOV [600],AL :将寄存器AL的值存储到偏移600
- HLT :停止