LinToSeg PROC NEAR PUBLIC
pop bx ; return address
pop ax ; low part
pop dx ; high part
mov cx,ax
and ax,0Fh
xor cx,ax
and dx,0Fh
or dx,cx
ror dx,4
jmp bx
LinToSeg ENDP
这段代码是什么意思。实在对地址操作还是对地址中的数据操作。汇编不太懂。。
------解决方案--------------------
这个,看什么意思的话,可以生成 exe 执行程序,拿组数据调用这个子程来看看执行结果了;要细究的话,就单步进子程看看没个指令的执行情况。
------解决方案--------------------
LinToSeg PROC NEAR PUBLIC
pop bx ; return address
pop ax ; low part
pop dx ; high part
;上面一段不解释(3个POP)。。。3个参数拉出,分别是返回地址和2个将被处理的数据。
mov cx,ax
and ax,0Fh
xor cx,ax
and dx,0Fh
or dx,cx
;这一段相当于MOV DH,AH,即把DH的值变为POP出的AH值
ror dx,4
;这句应该也不用解释了,循环右移4位。
jmp bx
;用JMP返回
LinToSeg ENDP
个人扯几句:
看样子不大像愿汁原味的汇编程序,像是其他语言写的被反汇编的,尤其像C。
互相置换下数据高那么复杂,不像汇编!
------解决方案--------------------
应该是对数据进行操作 dx、ax分别对应数据的高16位和低16位,下面也是对这个32为数据进行的处理,另外完成子程序后,程序就转向先前保存到bx中的地址去了,这个地址应该在主程序中调用子程序之前被最后压入堆栈的。