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

Joh*_*avo -3 assembly x86-16

我很久以前就编写了一个代码来获取用户输入并在屏幕上打印.现在,我需要将它用于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
Run Code Online (Sandbox Code Playgroud)

Pet*_*des 5

8086和8088是二进制兼容的.唯一的区别是8088有一个8位内存总线而不是16位,因此内存访问速度较慢. 根据维基百科的说法,CPU的执行核心部分在字面上完全相同,直到晶体管布局,只有总线接口单元不同.

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


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

COMexecutables(org 100h)不需要设置DS:程序加载器在跳转到入口点之前将所有段寄存器设置为相同.