程序集 8086 代码到 8088 兼容的转换 - 汇编程序错误



我很久以前写了一个代码来获取用户输入并在屏幕上打印。现在,我需要将其用于8088汇编程序并面临困难。在我看来像汇编程序问题,所以请指导我。

org 100h     
.data     
var1 db 100 dup("$")     
.code   
inputString proc
mov ax,@data
mov ds,ax 
mov si,offset var1 
l1:
mov ah,1
int 21h 
cmp al,13
je  printString 
mov [si],al
inc si
jmp l1
printString:
mov dx, offset var1
mov ah,9
int 21h
mov ah,4ch
int 21h
inputString endp
end inputString 
ret

> 8086 和 8088 是二进制兼容的。 唯一的区别是 8088 具有 8 位内存总线而不是 16 位,因此内存访问速度较慢。 根据维基百科,CPU的执行核心部分实际上与晶体管布局相同,只是总线接口单元不同。

8088 指令预取队列是 4 个字节,而不是 8086 中的 6 个字节,这实际上可能是一种优化,以减少使用较慢总线的分支之外浪费的预取。 另请参阅此逆向计算问答,了解指令计时和性能信息。


如果您遇到麻烦,您正在测试的 8088 可能运行的 DOS 版本与您的 8086 或其他版本不同。 (您的软件使用 DOSint 21h系统调用,因此它只能在过时的操作系统或现代模拟器/兼容层下工作)。

COM可执行文件(org 100h)不需要设置DS:程序加载器在跳转到入口点之前将所有段寄存器设置为相同。

org 100h     
.data     
var1 db 100 dup("$")     
.code

你确定你正在使用的汇编程序知道数据应该遵循代码,因为在.COM程序中,执行总是从顶部开始。

试试这个版本:

org 100h     
mov si,offset var1 
l1:
mov ah,1
int 21h 
cmp al,13
je  printString
mov [si],al
inc si
jmp l1
printString:
mov dx, offset var1
mov ah,9
int 21h
mov ax,4C00h
int 21h
var1 db 100 dup("$")

最新更新