我用这种汇编语言非常新,你们可以帮我吗
.model small
.stack
.code
org 100h
start:
main proc
mov cx,1; how many times to loop
here:mov al,00000001b
mov dx,378h
out dx,al
call delay
mov al,00000010b
mov dx,378h
out dx,al
call delay
mov al,00000100b
mov dx,378h
out dx,al
call delay
mov al,00001000b
mov dx,378h
out dx,al
call delay
mov al,00010000b
mov dx,378h
out dx,al
call delay
mov al,00100000b
mov dx,378h
out dx,al
call delay
mov al,01000000b
mov dx,378h
out dx,al
call delay
mov al,10000000b
mov dx,378h
out dx,al
call delay
loop here
int 20h
main endp
delay proc
push cx
mov cx,2050
delay2:
push cx
mov cx,10000
delay3:
nop
nop
nop
nop
nop
loop delay3
pop cx
loop delay2
pop ax
ret
delay endp
end start
这是我的代码
由于您正在写入端口0x378,所以我想您有8个LED,每个LED分别连接到并行端口上的8个数据引脚和8个接地引脚。这告诉我您有一台较旧的计算机,并且可能正在运行TRUE DOS。它是否正确? (如果是这样,请特别注意不要损坏并行端口的LED电流。强烈建议使用限流电阻。)
您正在使用Small模型,该模型旨在为链接器创建.OBJ文件以创建.EXE文件。但是,然后放置ORG 100h指令,该指令旨在为链接器创建.OBJ文件,以创建.COM文件,或直接在没有链接器的情况下创建它。
[如果要创建一个.EXE并运行此.EXE,是的,您将在某个时间点收到一条非法指令,并采用编码方式(标签应与它们应在的位置相距100h字节)。
如果还没有,则需要将.EXE转换为.COM文件。 .EXE扩展名(带有签名)将告诉操作系统加载堆栈,数据和代码段。 .COM扩展名(带有丢失的签名)将告诉OS只需加载二进制文件并跳转到偏移100h(周期)。
要读取该值,您将必须设置一个段寄存器和一个基址/索引寄存器以指向该物理地址。如果您不明白我的意思,则需要阅读有关16位分段寻址的信息。