本回答被提问者和网友采纳
你对這个回答的评价是
本回答被提问者和网友采纳
你对這个回答的评价是
bp与sp一般都用于堆栈寻址
bp,sp一般与ss段联用,sp做为基准(栈顶)bp在这个基准的基础上,在ss段内寻址
你图中的例子,是典型的用ss段进行参数传递的方式(函数的参数)在调用该函數之前,把需要传递给函数的数据压入栈中;进入函数体后,栈不做出栈操作而是利用bp定位到数据所在位置,读出使用
bp为基址寄存器,一般在函数中用来保存进入函数时的sp的栈顶基址
每次子函数调用时系统在开始时都会保存这个两个指针并在函数结束时恢复sp和bp的值。
在函数进入时:push bp ; 保存bp指针
mov bp,sp ; 将sp指针传给bp此时bp指向sp的基地址。
; 这个时候如果该函数有参数
;则[bp + 2*4]则是该子函数的第一个参数
;[bp+3*4]则是该子函数的 苐二个参数
;以此类推,有多少个参数则[bp+(n-1)*4]
..........
函数结束时:
mov sp,bp ;将原sp指针传回给sp
pop bp ;恢复原bp的值。
ret ;退出子函数
是的你可以改成81。这是一个相对更通用、功能更强一些的程序你可自行取舍。
可以加一下 数字转化成*其他字符转化成#,若#号输出0吗
你这些对主程序段略作修改很容易做到,请自已动手做做吧 !