问题–编写程序以在装配8086微处理器中的给定数组中查找最小值
例子 –
假设–输入数组的起始地址为0500,并将结果存储在地址0600中
算法 –
- 在SI中分配值500在DI中分配值600
- 在CL中移动[SI]的内容,并将SI递增1
- 将值00 H分配给CH
- 在AL中移动[SI]的内容
- 将CX的值减1
- 将SI的值增加1
- 在BL中移动[SI]的内容
- 比较BL与AL的值
- 如果设置了进位标志,则跳至步骤11
- 在AL中移动BL的内容
- 跳至第6步,直到CX的值变为0,然后将CX减小1
- 在[DI]中移动AL的内容
- 暂停程序
程序 –
MEMORY ADDRESS | MNEMONICS | COMMENTS |
---|---|---|
0400 | MOV SI, 500 | SI <- 500 |
0403 | MOV DI, 600 | DI <- 600 |
0406 | MOV CL, [SI] | CL <- [SI] |
0408 | MOV CH, 00 | CH <- 00 |
040A | INC SI | SI <- SI+1 |
040B | MOV AL, [SI] | AL <- [SI] |
040D | DEC CX | CX <- CX-1 |
040E | INC SI | SI <- SI+1 |
040F | MOV BL, [SI] | BL <- [SI] |
0411 | CMP AL, BL | AL-BL |
0413 | JC 0417 | Jump if carry is 1 |
0415 | MOV AL, BL | AL <- BL |
0417 | LOOP 040E | Jump if CX not equal to 0 |
0419 | MOV [DI], AL | [DI] <- AL |
041B | HLT | End of the program |
解释 –
- MOV SI,500将500分配给SI
- MOV DI,600将600分配给DI
- MOV CL,[SI]将[SI]的内容移至CL寄存器
- MOV CH,00将00分配给CH寄存器
- INC SI将SI的值增加1
- MOV AL,[SI]将[SI]的内容移至AL寄存器
- DEC CX将CX寄存器的内容减1
- INC SI将SI的值增加1
- MOV BL,[SI]将[SI]的内容移至BL寄存器
- CMP AL,BL从AL中减去BL寄存器的值,并修改标志寄存器
- 如果设置了进位标志,则JC 0417跳转到0417地址
- MOV AL,BL将BL寄存器的内容移至AL寄存器
- LOOP 040E循环运行,直到CX不等于零并将CX的值减小1
- MOV [DI],AL将AL的内容移至[DI]
- HLT停止执行程序