微机原理教材上的一个程序,为什么在emu8086上会死循环?高手赐教,会不会是EMU8086的问题啊?我用的是4.05版

两个16位二进制数相乘,会陷入死循环,但是查看变量,P1结果是有出来,而且正确

代码如下:

DDATA SEGMENT ;;数据段
D1 DW 1234H
D2 DW 5678H
P1 DD ?
P2 DD ? ; ;可删除!
DDATA ENDS

SSTACK SEGMENT STACK 'STACK'
STT DB 100 DUP (0)
TOP EQU LENGTH STT
SSTACK ENDS

CCODE SEGMENT
ASSUME CS:CCODE, DS:DDATA, SS:SSTACK

START: MOV AX,SSTACK ;;初始化SS
MOV SS,AX
MOV SP,100 ; ;初始化SP
PUSH DS ;
SUB AX,AX
PUSH AX

MOV AX,DDATA ; ;初始化DS
MOV DS,AX
L1: MOV AX,D1 ; ;D1×D2,积在(DX,AX)
MUL D2
MOV BX,OFFSET P1 ;;积→P2和P1所指向的存储单元
MOV [BX],AX
MOV [BX+2],DX
RET

CCODE ENDS
END START

而且,
PUSH DS ;返回DOS用
SUB AX,AX
PUSH AX
这三行也是看不懂,有什么意思?

看了一下,发现“push ax”-“ret" ret 的作用是把栈顶数据推给IP实现程序的跳转,而“sub ax,ax”把ax清空了,所以当执行到ret时程序就会自动跳转到“cs:0”处于是就成死循环了。
********************************程序本身就是个死循环****************************************************
想问下,这个代码没写完吧。push ds 没有用到啊
可以交个朋友大家一起学汇编吗?103141514
温馨提示:答案为网友推荐,仅供参考
相似回答