提菜鸟问题,老鸟请指点
1,IBM PC汇编与WINDOWS汇编区别
2,各种通用寄存器的区别和联系是什么
3,怎么操作堆栈来声明一个局部变量(不用伪指令local)
4,<Windows汇编语言程序设计教程>谭?安 张雪兰 编著一书中
分配内存用调用的是MALLOC,怎么自己写代码实现MALLOC?
4',上面这本书有无电子版本,我另开帖子送分.
问题点数:40、回复次数:4Top
1 楼fhb13(游途道标)回复于 2006-03-16 23:23:56 得分 15
1,WINDOWS汇编是IBM PC汇编的一种
2,通用寄存器,基址寄存器,段寄存器,标志寄存器
3,push ebp ;开始申请一个变量
mov ebp,esp
sub esp,4
xor eax,eax
mov [ebp],eax ;把第一个变量初始化为0
......
mov esp,ebp ;释放申请的变量
pop ebp
4,不好意识书我没看过,去超星看看估计有电子版。
不过超星用的扫描仪估计是十几年前的。
Top
2 楼Helloooooo(每天,我都新的)回复于 2006-03-20 21:18:35 得分 0
UPTop
3 楼mydo(侯佩|hopy|ks)回复于 2006-03-21 09:36:22 得分 10
ibm pc 汇编主要强调的是实模式下的汇编吧。
寄存器的关系请你自己看书。
自己在堆栈中预留空间,然后自己填写。
实模式下可以用 中断的方式,windows 下可以调用内存 api 。
不清楚。Top
4 楼icbm(雪狼)回复于 2006-03-21 11:43:58 得分 15
一、IBM PC汇编是独立于操作系统的。汇编程序员看到的最底层是CPU,程序员可以进行CPU允许的任何操作。如:程序员可以对GDTR、IDTR进行设置,等等。
Windows汇编是基于Windows操作系统的。汇编程序员看到的最底层是Widnows开放的各种接口,可以进行Windows操作系统允许的任何操作。诸如:任务切换、虚拟存储器管理、与硬件的直接进等操作,都被操作系统封装起来,对程序员来说是透明的。
二、寄存器的关系一般介绍汇编的书上都会有介绍的。这里我有回复别人的一个帖子,给你参考一下。
主题:什么时候用寄存器高位,什么时候用低位?有没有规律?
地址:http://community.csdn.net/Expert/topic/4538/4538134.xml?temp=.4734003
====================================================================
一般情况下,在写程序时,通用寄存器(ax,dx,cx,bx)使用是没差别的。所谓的“没差别”,是指指令的机器码长度(占用空间)、指令执行的时钟周期(执时速度)及对标志寄存器的影响都是一样的。
不过具体应用的时候,还是有一些常用的习惯的。
ax一般用做系统功能调用的入口,如:dos/bios功能调用等。另外高级语言(如:C、C++)一般会把返回值放在ax中。
dx一般用作间接寻址,如:dos的09h、0ah功能调用。还有做乘法的时候,两个16位数相乘的时候,dx:ax存放结果,dx存放高16位。
cx一般用做循环计数,如:loop系列指令。
bx做为通用数据寄存器。
所以在选用寄存器时,尽量遵循常用习惯,会给程序编写带来方便。
如:在一个用cx计数循环的循环体中,就不要再用cx做运算了,尽量选用循环体内没有使用的寄存器,如ax/bx等来做运算。如果一定要用cx运算,必须在运算前先push cx,运算结束后再pop cx,这样才能确保cx的循环计数正确,但这样显然增加了程序编写的复杂度。
====================================================================
三、fhb13(游途道标)的做法是正确的,只是中间有一点笔误。
push ebp ;开始申请一个变量
mov ebp,esp
sub esp,4
xor eax,eax
mov [ebp-4],eax ;把第一个变量初始化为0 ; *** 这里误打错了。 ***
......
mov esp,ebp ;释放申请的变量
pop ebp
四、没有看过这本书,也没有电子版。:(
Top




