emu8086这个显示LED数字的代码,改成masm611之后什么也不显示?附源代码

imur2008 2009-02-22 06:04:12
emu8086这个显示LED数字的代码,改成masm611之后什么也不显示?
emu8086源代码:

; this example shows how to access virtual ports (0 to 65535).
; these ports are emulated in this file: c:\emu8086.io

; this technology allows to make external add-on devices
; for emu8086, such as led displays, robots, thermometers, stepper-motors, etc... etc...

; anyone can create an animated virtual device.

; c:\emu8086\devices\led_display.exe

#start=led_display.exe#


#make_bin#

name "led"

mov ax, 1234
out 199, ax

mov ax, -5678
out 199, ax

; Eternal loop to write
; values to port:
mov ax, 0
x1:
out 199, ax
inc ax
jmp x1

hlt

改成masm611的源代码(可以编译成功,但运行exe没有显示):.model small
.stack 200h
.code

testproc proc

mov ax, 1234
out 199, ax

mov ax, -5678
out 199, ax

; Eternal loop to write
; values to port:
mov ax, 0
x1:
out 199, ax
inc ax
jmp x1

hlt
testproc endp

start:
mov ah,4ch
int 21h
end start

请问问题在什么地方?
谢谢先
...全文
793 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
imur2008 2009-02-24
  • 打赏
  • 举报
回复
老大真是高人啊!万分感谢!
willflyz 2009-02-24
  • 打赏
  • 举报
回复

;MASMPlus 代码模板 - 纯 DOS 程序
.model small
.stack 200h
.data
.code
start:
mov ax,cs
mov ds,ax
;mov ax,3C00h
;mov cx,20h ;文件属性为归档
;mov dx,offset fileName
;int 21h ;建立文件
jc err1
;mov bx,ax
;mov ax,3C00h
;int 21h ;关闭文件
mov ax,3d02H
mov dx,offset filename
int 21h ;按读写方式打开文件
jc err2
mov bx,ax
mov fHandle,ax
mov si,1
mov di,offset szMsg
s:
cmp si,10000
je t
call ChangeValue
inc WORD ptr [di]
inc si
call delay
jmp s

ChangeValue proc
mov cx,0
mov dx,199
mov al,0
mov ah,42H
int 21h
mov bx,fHandle
mov ax,4000H
mov cx,2 ;要写的字节数
mov dx, di
int 21h ;写到文件
jc err4
ret
ChangeValue endp

delay proc near public uses ax cx
mov cx, 5000
@@:
in al,61h
and al,10h
cmp al,ah
je @b
mov ah,al
loop @b
ret
delay endp

t:
mov ax,3c00H
int 21h
exit:
mov ah,1
int 21h
mov ax,4c00H
int 21h
err1:
mov dx,offset error1
jmp ShowErr
err2:
mov dx,offset error2
jmp ShowErr
err3:
mov dx,offset error3
jmp showerr
err4:
mov dx,offset error4
jmp showerr
ShowErr:
mov ax,900H
int 21h
jmp exit

szMsg dw 1
error1 db 'Create file fail.',13,10,'$'
error2 db 'Open file fail.',13,10,'$'
error3 db 'Write file fail.',13,10,'$'
error4 db 'Move postion fail.',13,10,'$'
fileName db 'c:\emu8086.io',0
fHandle dw ?
end start
imur2008 2009-02-24
  • 打赏
  • 举报
回复
强人!
学习中。。。
先行谢过

willflyz 2009-02-23
  • 打赏
  • 举报
回复
改变c:\emu8086.io文件中的值即可改变Led显示.

;MASMPlus 代码模板 - 纯 DOS 程序
.model small
.stack 200h
.data
.code
start:
mov ax,cs
mov ds,ax
;mov ax,3C00h
;mov cx,20h ;文件属性为归档
;mov dx,offset fileName
;int 21h ;建立文件
jc err1
;mov bx,ax
;mov ax,3C00h
;int 21h ;关闭文件
mov ax,3d02H
mov dx,offset filename
int 21h ;按读写方式打开文件
jc err2
mov bx,ax
mov fHandle,ax
mov si,1
mov di,offset szMsg
s:
cmp si,100
je t
call ChangeValue
inc BYTE ptr [di]
inc si
call delay
jmp s

ChangeValue proc
mov cx,0
mov dx,199
mov al,0
mov ah,42H
int 21h
mov bx,fHandle
mov ax,4000H
mov cx,1 ;要写的字节数
mov dx, di
int 21h ;写到文件
jc err4
ret
ChangeValue endp

delay proc near public uses ax cx
mov cx, 50000
@@:
in al,61h
and al,10h
cmp al,ah
je @b
mov ah,al
loop @b
ret
delay endp

t:
mov ax,3c00H
int 21h
exit:
mov ah,1
int 21h
mov ax,4c00H
int 21h
err1:
mov dx,offset error1
jmp ShowErr
err2:
mov dx,offset error2
jmp ShowErr
err3:
mov dx,offset error3
jmp showerr
err4:
mov dx,offset error4
jmp showerr
ShowErr:
mov ax,900H
int 21h
jmp exit

szMsg db 1
error1 db 'Create file fail.',13,10,'$'
error2 db 'Open file fail.',13,10,'$'
error3 db 'Write file fail.',13,10,'$'
error4 db 'Move postion fail.',13,10,'$'
fileName db 'c:\emu8086.io',0
fHandle dw ?
end start
willflyz 2009-02-22
  • 打赏
  • 举报
回复
是啊,楼主蔬忽了,子过程没有调用.
还有这句是不是会进入死循环,ax会不会溢出?
x1:
out 199, ax
inc ax
jmp x1
xtdumpling 2009-02-22
  • 打赏
  • 举报
回复
晕,你这个masm的程序啥都不做就退出了啊!!
start:
mov ah,4ch
int 21h
end start

你在start下面加句call testproc试试
imur2008 2009-02-22
  • 打赏
  • 举报
回复
我使用willflyz大侠的代码可以编译通过,但是运行exe的时候,什么也不出现
我现在发现原来的emu8086代码,调用了一个exe文件:
C:\emu8086\DEVICES\LED_Display.exe
这个文件就是显示“00241”这样的LED字,在emu8086下,里面的00241那个LED不断的变为00012,0024,00044等不断往上加,显示很快的
但是单单是打开那个LED_Display.exe,就是静态显示“00241”这样的LED字


不知应该怎么办?谢谢先

willflyz 2009-02-22
  • 打赏
  • 举报
回复
调用了子过程没有ret,不要直接用jmp,还用个loop吧,或者根据你自己的需要看要输出哪些东西再跳转,hlt用来干嘛的我也不清楚就mark掉了,

.model small
.stack 200h
.code

testproc proc uses ax
mov ax, 1234
out 199, ax
mov ax, -5678
out 199, ax
; Eternal loop to write
; values to port:
mov ax, 0
mov cx, 10000
x1:
out 199, ax
inc ax
loop x1
;hlt
ret
testproc endp

start:
call testproc
mov ah,1 ;暂停,任意键关闭
int 21h
mov ah,4ch
int 21h
end start
BAYNPU 2009-02-22
  • 打赏
  • 举报
回复
mov ah,1;这条指令是什么意思?把它改成MOV AH,2H还可以显示一个字符,另外这条调用指令call testproc 也不能随便添加。

int 21h
imur2008 2009-02-22
  • 打赏
  • 举报
回复
.model small
.stack 200h
.code

testproc proc

mov ax, 1234
out 199, ax

mov ax, -5678
out 199, ax

; Eternal loop to write
; values to port:
mov ax, 0
x1:
out 199, ax
inc ax
jmp x1

hlt
testproc endp

start:
;补充了下面3行,编译通过,运行exe的时候,光标在跳,对输入没有反应,也不能退出,只好重新启动DOS,应该是进入死循环了
call testproc
mov ah,1
int 21h

mov ah,4ch
int 21h
end start

请问应该怎么改,才能通过?谢谢先

21,500

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧