汇编 8086 代码到 8088 兼容的转换 - 汇编程序错误
Assembly 8086 code to 8088 compatible conversion - Assembler Error
我很久以前写了一个代码来获取用户输入并在屏幕上打印。现在,我需要将它用于 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 位内存总线,因此内存访问速度较慢。 According to Wikipedia,CPU 的执行核心部分在晶体管布局上完全相同,只是总线接口单元不同。
The 8088 instruction prefetch queue is 4 bytes instead of 6 in 8086, which may actually have been an optimization to reduce wasted prefetch beyond branches with the slower bus. See also this retrocomputing Q&A 用于指令时序和性能信息。
如果您 运行 遇到麻烦,您正在测试的 8088 可能 运行 与您的 8086 或其他东西不同的 DOS 版本。 (您的软件正在使用 DOS int 21h
系统调用,因此它只能在过时的 OS 或现代仿真器/兼容层下运行。
COM
可执行文件(org 100h
)不需要设置DS
:程序加载器在跳转到入口点之前将所有段寄存器设置为相同。
org 100h
.data
var1 db 100 dup("$")
.code
您确定您使用的汇编程序知道 DATA 应该跟在 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("$")
我很久以前写了一个代码来获取用户输入并在屏幕上打印。现在,我需要将它用于 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 位内存总线,因此内存访问速度较慢。 According to Wikipedia,CPU 的执行核心部分在晶体管布局上完全相同,只是总线接口单元不同。
The 8088 instruction prefetch queue is 4 bytes instead of 6 in 8086, which may actually have been an optimization to reduce wasted prefetch beyond branches with the slower bus. See also this retrocomputing Q&A 用于指令时序和性能信息。
如果您 运行 遇到麻烦,您正在测试的 8088 可能 运行 与您的 8086 或其他东西不同的 DOS 版本。 (您的软件正在使用 DOS int 21h
系统调用,因此它只能在过时的 OS 或现代仿真器/兼容层下运行。
COM
可执行文件(org 100h
)不需要设置DS
:程序加载器在跳转到入口点之前将所有段寄存器设置为相同。
org 100h .data var1 db 100 dup("$") .code
您确定您使用的汇编程序知道 DATA 应该跟在 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("$")