Jasper Ji

开口不在舌头上

0%

MASM汇编语言学习笔记

教程

王爽的《汇编语言》第四版,如果没有写过汇编,最好从头开始读。我一开始就以为自己有高级语言的经历,选择性的看书,结果发现还是没有理解汇编语言的核心。

环境

我的电脑是Mac,用虚拟机安装了windows xp系统,使用MASM 5.0,下载的安装包里还有LINK程序。IDE使用RadAsm,这个编辑器的高亮功能不错,不过不支持自动补全。

问题

栈的数据莫名其妙多了些无关的数据

assume cs:codesg,ss:stack

stack segment
    dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
stack ends

codesg segment
start:
    mov ax, stack
    mov ss, ax
    mov sp, 20h
    
    mov cx,10h
    mov bx,0
s:
    add bx, 1
    push bx
    
    loop s
    
    mov ax, 4c00h
    int 21h
codesg ends

end start

Debug下我发现运行最后会报错,发现栈中多了一些数据,而且是我一旦设置栈段后,就会出现这些数据。我把书中的例子也试了下,发现也有这个问题,不过书中栈设置的比较大,所以运行不会出问题,而我这个刚好设置的就是我需要的数据大小。后来在汇编语言论坛,找到相关问题,意思是Debug下会在栈中存储一些数据的缘故,所以栈的大小不能刚适合,这会有问题的。