问题–在8086微处理器中编写程序,以找出偶数序列的总和,其中从起始偏移量500开始存储数字,并将结果存储在偏移量600中。
例子 –
算法 –
- 将500分配给SI
- 将数据从偏移量SI加载到寄存器CL(计数),并将00分配给寄存器CH inc。 SI乘1
- 从偏移量SI加载数据,并使用01进行测试,如果结果非零,则跳至步骤5
- 将偏移数据与寄存器AL相加
- 偏移增加1
- 跳至步骤3
- 将结果(寄存器AL的内容)存储到偏移量600
- 停止
程序 –
MEMORY ADDRESS | MNEMONICS | COMMENT |
---|---|---|
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 AND 01 |
40F | JNZ 413 | JUMP IF NOT ZERO |
411 | ADD AL, BL | AL<-AL+BL |
413 | INC SI | SI<-SI+1 |
414 | LOOP 40A | JUMP TO 40A IF CX NOT ZERO |
416 | MOV [600], AL | AL->[600] |
41A | HLT | END |
解释 –
- MOV SI,500:将500分配给SI
- MOV CL,[SI]:将数据从偏移量SI加载到寄存器CL
- INC SI:将SI的值增加1
- MOV CH,00:将00分配给寄存器CH
- MOV AL,00:将00分配给寄存器AL
- MOV BL,[SI]:将数据从偏移量SI加载到寄存器BL
- TEST BL,01: AND BL与01
- JNZ 413:如果不为零,则跳转到地址413
- 添加AL,BL:添加寄存器AL和BL的内容
- INC SI:将SI的值增加1
- 回路40A:如果CX不为零且CX = CX-1则跳至40A
- MOV [600],AL:将寄存器AL的值存储到偏移600
- HLT:结束。
参考– 8086程序以查找给定序列中的奇数和