王爽汇编13.3对int,iret和栈的深入理解的疑惑
就是用7ch中断例程完成loop指令那道例题
7ch中断例程如下。
lp:push bp ;bp入栈是什么意思,直接修改SP不就行了吗
mov bp,sp
dec cx
jcxz lpret
add [bp+2],bx ;怎么知道DS 和SS是在一个段,[bp+2]如果不写段的话默认就是ds吧
lpret:pop bp
iret
还有之前的求s的偏移地址
mov bx,offset s-offset se ;设置从标号se到标号s的位移转移?
mov cx,80
s:mov byte prt es:[di],'!'
add di,2
int 7ch
se:nop
还有之前的求s的偏移地址,
mov bx,offset s-offset se 这是什么意思? s在前,se在后 这样减不成负值了吗? 直接offset s不就是 s的偏移地址了吗?
问题:1.bp入栈是什么意思,直接修改SP不就行了吗
2.怎么知道DS 和SS是在一个段,[bp+2]如果不写段的话默认就是ds吧
3.s标号在前,se标号在后 这样减不成负值了吗 ?直接offset s不就是 s的偏移地址了吗?
[解决办法]
>> add [bp+2],bx ;怎么知道DS 和SS是在一个段,[bp+2]如果不写段的话默认就是ds吧
这是不对的,[bp+2] 这样的以 bp 间接寻址的,默认段址是 SS 而非 DS
那个 offset s-offset se 的问题,由于没有更多的内容,看不到对这个计算结果是怎么使用的,所以具体用途就不知道了。
>> bp入栈是什么意思,直接修改SP不就行了吗
bp 入栈是为了保存 bp 以便最后的出栈进行恢复,直接修改 sp 的话,能有这效果吗?