问题–在8086微处理器中编写程序,以生成n个八位数字的算术级数(AP)系列。
假设–
假设大小“ n”存储在偏移量500中,而第一个数字(a)存储在偏移量501中,并且公共差值存储在偏移量502中。将序列存储到内存地址偏移量600中。
例子 –
算法 –
- 将500存储到SI中,将600存储到DI中将数据从偏移500加载到寄存器CL中,并将寄存器CH设置为00(用于计数)。
- 将SI的值增加1。
- 从下一个偏移量(即501)加载第一个数字(值)到寄存器AL。
- 将寄存器AL的值存储到存储器偏移量DI中。
- 将DI增加1。
- 将CL减1。
- 从下一个偏移量(即502)加载第二个数字(共差)到寄存器BL。
- 添加寄存器AL和BL。
- 将结果(寄存器AL的值)存储到内存偏移DI中。
- 将SI的值增加1。
- 在3之上循环直到寄存器CX变为0。
程序 –
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 | INC SI | SI<-SI+1 |
40B | MOV DI, 600 | DI<-600 |
40E | MOV [DI], AL | [DI]<-AL |
410 | INC DI | DI<-DI+1 |
411 | DEC CL | CL<-CL-1 |
412 | MOV BL, [SI] | BL<-[SI] |
414 | ADD AL, BL | AL<-AL+BL |
416 | MOV [DI], AL | [DI]<-AL |
418 | INC DI | DI<-DI+1 |
419 | LOOP 414 | JUMP TO 414 IF CX!=0 and CX=CX-1 |
41B | 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的加载值
- INC SI:将SI的值增加1。
- MOV DI,500:将DI的值设置为600。
- MOV [DI],AL:将寄存器AL的值存储在偏移量DI处。
- INC DI:将DI的值增加1。
- DEC CL:将寄存器CL的值减1。
- MOV BL,[SI]:从偏移量SI加载到寄存器BL的值。
- MUL BL:BL将寄存器AL的值相加。
- MOV [DI],AL:将寄存器AL的值存储在偏移量DI处。
- INC DI:将DI的值增加1。
- 循环414:如果CX不为0并且CX = CX-1,则跳转到地址414。
- HLT:停止。