【发布时间】:2021-01-16 19:34:01
【问题描述】:
我正在尝试使用 TASM 分配一些应该用作缓冲区的内存。
为此,我首先使用以下方法解除分配给可执行文件的所有内存:
MOV BX, SS
MOV AX, ES
SUB BX, AX
MOV AX, SP
ADD AX, 0fh
SHR AX, 4
ADD BX, AX
MOV AH, 4ah
INT 21h
之后我尝试使用以下方法分配 64000 个字节:
MOV AH, 48h
MOV BX, 64000/16
INT 21h
MOV buffer, AX
这似乎完美无缺,因为执行后没有设置 CARRY 标志 指令 21h。
稍后我最终会尝试填充刚刚分配的内存,例如:
MOV BX, OFFSET BUFFER
MOV ES, BX
XOR DI,DI
MOV CX,64000/2
MOV AL,12
MOV AH,AL
REP STOSW
不幸的是,由于程序在REP STOSW 指令处冻结而失败。
现在我有点迷路了,因为我找不到明显错误的地方。那么为什么会这样呢?
这是我的完整来源:
.MODEL LARGE
.STACK 100h
.DATA?
buffer DW ?
.CODE
Main:
MOV BX, SS
MOV AX, ES
SUB BX, AX
MOV AX, SP
ADD AX, 0fh
SHR AX, 4
ADD BX, AX
MOV AH, 4ah
INT 21h
MOV AH, 48h
MOV BX, 64000/16
INT 21h
MOV buffer, AX
MOV BX, OFFSET BUFFER
MOV ES, BX
XOR DI,DI
MOV CX,64000/2
MOV AL,12
MOV AH,AL
REP STOSW
MOV AH,4ch
INT 21h
END Main
【问题讨论】: