我正在做一个大学项目,我真的很不擅长组装,所以请你帮忙。
“在VGA模式(320x200像素-256色)中,应该以垂直方向居中绘制两个字母(D和Q),高度至少为100像素。
高度将是可配置的,并存储到变量中,并且如果高度小于100像素,则不应运行。宽度和位置由您选择。“
我做了一些研究,结果就是代码,我知道这不完全符合我的要求,希望您能为我提供帮助。
1.对于VGA模式,我是否应该通过VGA电缆连接一台显示器以实际查看我的程序是否运行并且效果很好?
2.DS会自动从.DATA中获取数据吗?
3.使用系统调用时,应该等到按下键盘吗?
我们通常在大学notepad ++上使用带有masm插件和ollydbg的调试器,但只要他们能够执行预期的工作,我就可以打开。必须是.386。
预先感谢您,尤其是感谢您阅读本文。
.386
.model flat, stdcall
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;including msvcrt.lib, and declaring what function to import
includelib msvcrt.lib
extern exit: proc
;declare the symbol start as public - from there execution starts
public start
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;declaring data we are using
data segment
letter1 db 'D'
letter2 db 'Q'
COLORTEXT equ 7
.code
_InitializeMCGA PROC
MOV AX, 0A000h
MOV ES, AX ; ES now points to the VGA
MOV AH, 00H ; Set video mode
MOV AL, 13H ; Mode 13h
INT 10H ; We are now in 320x200x256
RET
_InitializeMCGA ENDP
start:
;MOV AX, @DATA
;MOV DS, AX ; DS now points to the data segment.
;those 2 instructions above are commented because I read that DS is taking automatically the data from .DATA
;let me know if it's wrong
CALL _InitializeMCGA ; ENTER MODE 13H
MOV AH, letter1
MOV ES, AX
MOV BP, OFFSET COLORTEXT ; ES: BP POINTS TO THE TEXT
MOV AH, 13H ; WRITE THE STRING
MOV AL, 01H; ATTRIBUTE IN BL, MOVE CURSOR TO THAT POSITION
XOR BH,BH ; VIDEO PAGE = 0
MOV BL, COLORTEXT ;colour (7=white as far as I know)
MOV CX, 25 ; LENGTH OF THE STRING
MOV DH, 50 ;ROW TO PLACE STRING
MOV DL, 10; COLUMN TO PLACE STRING
syscall ;wait for keyboard to be pressed
MOV AX, 4C00H ;dos exit
INT 21H ; Return to DOS
;finish the program
end start
答案 0 :(得分:1)
由于您使用的是MASM和Int21h,因此我假设您的目标是DOS。应该提到过。
syscall
。使用中断16h,AH = 0读取密钥。对于字符输出,我建议中断10h,功能9。使用功能2定位光标。
编辑:
首先,您查找中断文档。甚至维基百科provides some。
然后在代码中,根据规范将值分配给寄存器,然后调用中断。例如,对于INT 10功能2,它将运行:
mov ah, 2h ; the function
mov bh, 0 ; the page - assume 0
mov dh, 1 ; row
mov dl, 5 ; column
int 10h
那样的。但是对您的要求有多个中断调用。
现在,关于构建和运行,您必须问一位老师。然后您通过构建和运行可执行文件对其进行测试。我确定他们在某些时候已经向您说明了如何;由于没有唯一正确的方法来构建汇编程序,因此我不知道您的教授期望什么,因此对此无济于事。