摘要: 在多线程处理中,用汇编语言记述的代码每运行1行,处理都有可能切换到其他线程(函数)中。因而,设 MyFuncl 函数在读出counter 的数值 100 后,还未来得及将它的2倍值 200写人 counter时,正巧 MyFunc2 函数读出了 counter的数值 100,那么结果就会导致 cou 阅读全文
posted @ 2023-02-14 21:40 原魏薯片 阅读(12) 评论(0) 推荐(0) 编辑
摘要: 条件分支的实现方法同循环处理的实现方法类似,使用的也是cmp指令和跳转指令。 条件分支就是利用这些指令来实现的。代码清单10-11是,根据变量a的值来调用不同函数(MySub3函数)的从语言源代码。结果如代码清单10-12所示。 代码清单 10-12 中用到了三种跳转指令,分别是比较结果小时跳转的 阅读全文
posted @ 2023-02-14 21:33 原魏薯片 阅读(49) 评论(0) 推荐(0) 编辑
摘要: C语言程序的流程控制,代码清单10-8。 C语言的for语句是通过括号中指定循环计数器的初始值(i=0)、循环的继续条件(i<10)、循环计数器的更新(i++)这3种形式来进行循环处理的。与此同对,在汇编语言的源代码中,循环通过比较指令(cmp)和跳转指令(jl来实现)。 代码清单10-10是按照代 阅读全文
posted @ 2023-02-14 21:12 原魏薯片 阅读(17) 评论(0) 推荐(0) 编辑
摘要: 在代码清单10-6中定义了10个局部变量。这是为了表示存储局部变量的不仅仅是栈,还是寄存器。为了确保c1~c10所需的领域,寄存器空闲时就使用寄存器,寄存器空间不足就使用栈。 x86 系列 CPU拥有的寄存器中,程序可以操作的有十几个。其中空闲的,最多也只有几个。因而,局部变量数目很多的时候,可分配 阅读全文
posted @ 2023-02-14 21:01 原魏薯片 阅读(15) 评论(0) 推荐(0) 编辑
摘要: C语言中,在函数外部定义的变量 称为全局变量,在函数内部定义的变量称为局部变量。 代码清单10-6的C语言源代码中定义了初始化(设定了初始值)的a1~a5这5个全局变量,以及没有初始化(没有设定初始值)的b1~b5这5个全局变量,此外还定义了c1~c10这10个局部变量,且分别给 各变量赋了值。 将 阅读全文
posted @ 2023-02-14 20:53 原魏薯片 阅读(17) 评论(0) 推荐(0) 编辑
摘要: ebp 寄存器的值在(1)中人栈,在(5)中出栈。这主要是为了把函数中用到的 ebp 寄存器的内容,恢复到函数调用前的状态。在进入函数处理之前,无法确定 ebp 寄存器用到了什么地方,但由于函数内部也会用到 ebp 寄存器,所以就暂时将该值保存了起来。CPU 拥有的寄存器是有数量限制的。在函数调用前 阅读全文
posted @ 2023-02-14 20:41 原魏薯片 阅读(13) 评论(0) 推荐(0) 编辑
摘要: 代码清单 10-1 中列出的C语言源代码中,有一个处理是在变量c中存储 AddNum 函数的返回值,不过在汇编语言的源代码中,并没有与此对应的处理。这是因为编译器有最优化功能。最优化功能是编译器在本地代码上费尽功夫实现的,其目的是让编译后的程序运行速度更快、文件更小。在代码清单 10-1 中,由于存 阅读全文
posted @ 2023-02-14 20:32 原魏薯片 阅读(10) 评论(0) 推荐(0) 编辑
摘要: 数据在存储时是从内存的下层(大的地址编号)逐渐往上层(小的地址编号)累积,读出时则是按照从上往下的顺序进行(图10-3)的。 栈是存储临时数据的区域,它的特点是通过 push 指令和 pop指令进行数据的存储和读出。往栈中存储数据称为“人栈”,从栈中读出数据称为“出栈”。32位x86系列的CPU中, 阅读全文
posted @ 2023-02-14 20:00 原魏薯片 阅读(98) 评论(0) 推荐(0) 编辑
摘要: 指令中最常使用的是对寄存器和内存进行数据存储的 mov 指令。mov 指令的两个操作数,分别用来指定数据的存储地和读出源。操作数中可以指定寄存器、常数、标签(附加在地址前),以及用方括号()围起来的这些内容。如果指定了没有用方括号围起来的内容,就表示对该值进行处理:如果指定了用方括号围起来的内容,方 阅读全文
posted @ 2023-02-14 19:40 原魏薯片 阅读(202) 评论(0) 推荐(0) 编辑
摘要: 在汇编语言中,1行表示对CPU的一个指令。汇编语言指令的语法结构是操作码+操作数(也存在只有操作码没有操作数的指令)。 能够使用任何形式的操作码,是由CPU的种类决定的。表10-1对代码清单10-2中用到的操作码的功能进行了整理。 本地代码加载到内存才能运行。 寄存器是CPU中的存储区域。不过,寄存 阅读全文
posted @ 2023-02-14 19:37 原魏薯片 阅读(23) 评论(0) 推荐(0) 编辑
摘要: 汇编语言的源代码,是由转换成本地代码的指令(即操作码)和针对汇编器的伪指令构成的。伪指令负责把程序的构造及汇编的方法指示给汇编器(转换程序)。伪指令本身是无法汇编转换成本地代码的。这里我们把代码清单10-2中用到的伪指令部分摘出,如代码清单10-3所示。 由伪指令 segment和ends围起来的部 阅读全文
posted @ 2023-02-14 18:55 原魏薯片 阅读(13) 评论(0) 推荐(0) 编辑