问题–在8086微处理器中编写程序,以找出两个8位n个数字数组的对应元素的减法,其中大小“ n”存储在偏移500中,第一个数组的编号存储在偏移501和数字中从偏移量601开始存储第二个数组,并将结果编号存储到第一个数组(即偏移量501)中。
例子 –
算法 –
- 将500存储到SI中,将601存储到DI中,并将来自偏移500的数据加载到寄存器CL中,并将寄存器CH设置为00(用于计数)。
- 将SI的值增加1。
- 从下一个偏移量(即501)加载第一个数字(值)到寄存器AL。
- 用偏移量DI处的值减去寄存器AL中的值。
- 将结果(寄存器AL的值)存储到存储器偏移SI中。
- 将SI的值增加1。
- 将DI的值增加1。
- 在5以上循环直到寄存器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 DI, 601 | DI<-601 |
40B | MOV AL, [SI] | AL<-[SI] |
40D | SUB AL, [DI] | AL=AL-[DI] |
40F | MOV [SI], AL | AL->[SI] |
411 | INC SI | SI<-SI+1 |
412 | INC DI | DI<-DI+1 |
413 | LOOP 40B | JUMP TO 40B IF CX!=0 and CX=CX-1 |
415 | HLT | end |
解释 –
- MOV SI,500:将SI的值设置为500
- MOV CL,[SI]:将数据从偏移量SI加载到寄存器CL
- MOV CH,00:将寄存器CH的值设置为00
- INC SI:将SI的值增加1。
- MOV DI,600:将DI的值设置为600。
- MOV AL,[SI]:从偏移量SI到寄存器AL的加载值
- SUB AL,[DI]:用偏移量DI处的内容减去寄存器AL的值。
- MOV [SI],AL:将寄存器AL的值存储在偏移SI中。
- INC SI:将SI的值增加1。
- INC DI:将DI的值增加1。
- 回路408:如果CX不为0并且CX = CX-1,则跳转到地址408。
- HLT:停止