如何解决用图纸在装配中打印
我正在程序集 tasm ms-dos 中创建一个注册页面和一个登录页面。我试图在屏幕上打印“名称:”,但只要屏幕上有绘图,它就不起作用。你知道我做错了什么吗? 这是我的代码:
proc SignUpPage
mov ah,0 ; set display mode function.
mov al,13h ; mode 13h = 320x200 pixels,256 colors.
int 10h ; set it!
mov al,0Fh
mov cx,-1 ;col
mov dx,-1 ;row
mov ah,0ch ; put pixel
;jmp WRITE
signUpTopBar:
inc cx
int 10h
cmp cx,640
jne signUpTopBar
mov cx,10 ; reset to start of col
inc dx ;next row
cmp dx,30
jne signUpTopBar
mov al,0h
mov cx,0 ;col
mov dx,5 ;row
mov ah,0ch ; put pixel
loginButton:
inc cx
int 10h
cmp cx,60
jne loginButton
mov cx,0 ; reset to start of col
inc dx ;next row
cmp dx,30
jne loginButton
call printNewLine
call printNewLine
mov dx,offset LoginMessage
mov ah,09h
int 21h
mov ax,0h
int 33h
mov ax,1h
int 33h
pressLogin:
mov ax,3h
int 33h
cmp bx,01h
jne pressLogin
shr cx,1
sub dx,2
cmp cx,60
ja pressLogin
cmp dx,5
jb pressLogin
cmp dx,30
ja pressLogin
mov si,0
mov cx,200
BREAKLINE_SIGNUP:
call printNewLine
inc si
loop BREAKLINE_SIGNUP
call LoginPage
WRITE:
MOV DL,0 ;SCREEN COLUMN.
MOV DH,7 ;SCREEN ROW.
MOV AH,2 ;SERVICE TO SET CURSOR POSITION.
MOV BH,0 ;PAGE NUMBER.
INT 10H ;BIOS SCREEN SERVICES.
mov dx,offset nameMessage
mov ah,09h
int 21h
ret
endp SignUpPage
proc LoginPage
mov ah,0ch ; put pixel
loginTopBar:
inc cx
int 10h
cmp cx,640
jne loginTopBar
mov cx,30
jne loginTopBar
mov al,0ch ; put pixel
signUpButton:
inc cx
int 10h
cmp cx,70
jne signUpButton
mov cx,30
jne signUpButton
call printNewLine
call printNewLine
mov dx,offset SignUpMessage
mov ah,1h
int 33h
pressSignUp:
mov ax,01h
jne pressSignUp
shr cx,60
ja pressSignUp
cmp dx,5
jb pressSignUp
cmp dx,30
ja pressSignUp
mov si,200
call SignUpPage
ret
endp LoginPage
call printNewLine 是一个从汇编库打印新行的函数
解决方法
WRITE 永远不会执行!
就在您尝试此 WRITE 之前,您 call
LoginPage 但永远不会返回,因为它以 call
结束 SignUpPage 有效地创建了一个无限循环!!!
你有很多未定义的行为!
您使用的屏幕水平为 320 像素,垂直为 200 像素。尽管如此,您的代码要求 BIOS 在 X 范围 [0,640] 和 Y 范围 [-1,29] 中绘制像素。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。