SSEG SEGMENT PARA STACK
DW 256 DUP(?)
SSEG ENDS
DSEG SEGMENT
MESS DB 'HELLO',0DH,0AH,'$'
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
START: MOV AX,DSEG
MOV DS,AX
MOV DX,OFFSET MESS//如果这里的DX换成BX就会出现乱码,
MOV AH,9
INT 21H
MOV AH,4CH
INT 21H
CSEG ENDS
END START
这是课本上的程序,在下想知道ds在何时选用dx又在何时选用bx,这两者是怎么区分的?
ds?dx?bx,汇编
------解决方案--------------------
那里,必须使用 DX 是因为 int21h 的 9 功能调用就是这么规定的,待显示的字符串,其地址必须在 DS:DX ,所以若用 BX 来替换 DX int21h 是不承认的,还是会使用 DS:DX 来获得字符串,所以就可能出现乱码了。
------解决方案--------------------
MOV AH,9
INT 21H就决定了你的字符串必须在dx中。
------解决方案--------------------
你调用的是INT21H,这个的参数位置是固定的