永发信息网

汇编语言问题。

答案:4  悬赏:40  手机版
解决时间 2021-03-19 16:29
  • 提问者网友:杀手的诗
  • 2021-03-19 09:17
assume cs:codesg
codesg segment
mov ax,2000H
mov ss,ax
mov sp,0
add sp,4
pop ax
pop bx
push ax
push bx
pop ax
pop bx
mov ax,4c00H
int 21H
codesg ends
end
这是王爽老师的汇编语言书籍上的一段实验代码,说要做完这个实验之后才进行下面的课程,我起初是看了一遍,觉得怎么看都有地方不正确,后来编译连接成可执行程序之后,在debug里调试第一pop ax时遇到无效指令退出。对于这个问题有没老师帮忙解答下?
最佳答案
  • 五星知识达人网友:迟山
  • 2021-03-19 10:38
这段代码只是演示使用堆栈的方法交换存储单元的内容(即2000:0004及2000:0005单元),没有什么不妥!
没有使用堆栈来传递参数或返回值,谈不上堆栈平衡!
PUSH,POP通常成对出现,但这不是必须的!遇到不成对的情况,应当警觉,更细致地分析,而不是立即否定!

至于弹出的原因,可能与保护模式有关!
全部回答
  • 1楼网友:酒醒三更
  • 2021-03-19 13:43
汇编语言(assembly language)是面向机器的程序设计语言.汇编语言是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。汇编语言”作为一门语言,对应于高级语言的编译器,需要一个“汇编器”来把汇编语言原文件汇编成机器可执行的代码。高级的汇编器如masm, tasm等等为我们写汇编程序提供了很多类似于高级语言的特征,比如结构化、抽象等。在这样的环境中编写的汇编程序,有很大一部分是面向汇编器的伪指令,已经类同于高级语言。现在的汇编环境已经如此高级,即使全部用汇编语言来编写windows的应用程序也是可行的,但这不是汇编语言的长处。汇编语言的长处在于编写高效且需要对机器硬件精确控制的程序。  在汇编语言中,用助记符(memoni)代替操作码,用地址符号(symbol)或标号(label)代替地址码。这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。因此汇编语言亦称为符号语言。  使用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理系统软件。汇编语言编译器把汇编程序翻译成机器语言的过程称为汇编。  汇编语言比机器语言易于读写、调试和修改,同时具有机器语言全部优点。但在编写复杂程序时,相对高级语言代码量较大,而且汇编语言依赖于具体的处理器体系结构,不能通用,因此不能直接在不同处理器体系结构之间移植。 汇编语言的特点: 1.面向机器的低级语言,通常是为特定的计算机或系列计算机专门设计的。 2.保持了机器语言的优点,具有直接和简捷的特点。 3.可有效地访问、控制计算机的各种硬件设备,如磁盘、存储器、cpu、i/o端口等。 4.目标代码简短,占用内存少,执行速度快,是高效的程序设计语言。 5.经常与高级语言配合使用,应用十分广泛。 汇编语言的应用: 1.70%以上的系统软件是用汇编语言编写的。 2.某些快速处理、位处理、访问硬件设备等高效程序是用汇编语言编写的。 3.某些高级绘图程序、视频游戏程序是用汇编语言编写的。 汇编语言是我们理解整个计算机系统的最佳起点和最有效途径 人们经常认为汇编语言的应用范围很小,而忽视它的重要性。其实汇编语言对每一个希望学习计算机科学与技术的人来说都是非常重要的,是不能不学习的语言。 所有可编程计算机都向人们提供机器指令,通过机器指令人们能够使用机器的逻辑功能。 所有程序,不论用何种语言编制,都必须转成机器指令,运用机器的逻辑功能,其功能才能得以实现。 机器的逻辑功能,软件系统功能构筑其上,硬件系统功能运行于下。 汇编语言直接描述机器指令,比机器指令容易记忆和理解。通过学习和使用汇编语言,能够感知、体会、理解机器的逻辑功能,向上为理解各种软件系统的原理,打下技术理论基础;向下为掌握硬件系统的原理,打下实践应用基础。 学习汇编语言,向上可以理解软件,向下能够感知硬件,是我们理解整个计算机系统的最佳起点和最有效途径。
  • 2楼网友:青尢
  • 2021-03-19 12:05
没有先push,怎么可以用pop,直接pop的话,你不知道堆栈里pop的什么内容到ax,所以会导致未知的错误。push,pop是成对使用,先有push再有pop,少一个或顺序颠倒就会导致错误。
  • 3楼网友:刀戟声无边
  • 2021-03-19 11:37
这个程序逻辑有错, 但是语法不会有错.也没有无效指令, 可能是你DEBUG用得不对...
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯