CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  其他开发语言 >  汇编语言

提菜鸟问题,老鸟请指点

楼主Helloooooo(每天,我都新的)2006-03-16 18:58:59 在 其他开发语言 / 汇编语言 提问

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

相关问题

  • 菜鸟提问,高手请指点~~~~~~~~~~
  • 菜鸟问题,请指点!!
  • 请指点菜鸟,谢谢
  • 菜鸟提问:链接时候报错,请大家指点。
  • 菜鸟提问,估计大家都会,指点一下
  • 菜鸟提问,请各位大侠指点一下。
  • 老鸟、菜鸟……都进来指点指点!
  • 我是菜鸟,那位大哥指点指点~~谢谢!!
  • 菜鸟问题,请大虾指点
  • 菜鸟问题!大虾指点迷津!

关键词

  • 汇编
  • 程序员
  • pc
  • ibm
  • 寄存器
  • 变量
  • 调用
  • cx
  • ebp
  • 运算

得分解答快速导航

  • 帖主:Helloooooo
  • fhb13
  • mydo
  • icbm

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo