问题–在8086微处理器中编写一个程序,以找出8位n个数字的多维数据集,其中大小“ n”存储在偏移量500中,并且该数字存储在偏移量501中,并将结果数字存储到偏移量501中。(假设多维数据集仅限制在8位以内)。
例子 –
算法 –
- 将500存储到SI中,并将数据从偏移500加载到寄存器CL中,并将寄存器CH设置为00(用于计数)。
- 将SI的值增加1。
- 将偏移量SI中的编号(值)加载到寄存器AL中。
- 将寄存器AL的值移至BL。
- 自身乘以寄存器AL中的值。
- 将寄存器AL中的值乘以BL。
- 将结果(寄存器AL的值)存储到存储器偏移SI中。
- 将SI的值增加1。
- 在6之上循环直到寄存器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 | MOV BL, AL | BL<-AL |
40C | MUL AL | AX=AL*AL |
40E | MUL BL | AX=AL*BL |
410 | MOV [SI], AL | AL->[SI] |
412 | INC SI | SI<-SI+1 |
413 | LOOP 408 | JUMP TO 408 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 AL,[SI]:从偏移量SI到寄存器AL的加载值
- MOV BL,AL:将寄存器AL的值移动到BL。
- MUL AL:将寄存器AL的值乘以AL。
- MUL BL:将寄存器AL的值乘以BL。
- MOV [SI],AL:将寄存器AL的值存储在偏移SI中。
- INC SI:将SI的值增加1。
- 回路408:如果CX不为0并且CX = CX-1,则跳转到地址408。
- HLT:停止