|
主题 : : 实验9,很笨的办法……不会计算屏幕中间的位置…… [待解决] |
回复[ 2次 ]
点击[ 330次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2010-10-24 14:13 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-10-23 15:46 |
代码如下:
assume cs:code
data segment
db 'Welcome to masm!'
data ends
code segment
start:
mov ax,data
mov ds,ax
mov bx,0
mov ax,0B866H
mov es,ax
mov bp,0000H
mov si,0
mov cx,07H
;;;;;;;;;;;;;;;;;输出welcome;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
s:
mov al,ds:[bx]
mov es:[bp],al
mov es:[bp+1],00000010B
add bp,2
inc bx
loop s
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov cx,2
inc bx
add bp,2
;;;;;;;;;;;;;;;;;;输出to;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
s1:
mov al,ds:[bx]
mov es:[bp],al
mov es:[bp+1],00100100B
add bp,2
inc bx
loop s1
;;;;;;;;;;;;;;;;;;输出masm!;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov cx,5
inc bx
add bp,2
s2:
mov al,ds:[bx]
mov es:[bp],al
mov es:[bp+1],01110001B
add bp,2
inc bx
loop s2
mov ax,4c00h
int 21h
code ends
end start
屏幕的中间位置如何计算啊?高人帮说下……谢谢! | | |
|
|
|
|
[第1楼]
[ 回复时间:2010-10-25 17:31 ]
[引用]
[回复]
[ top ] | |
荣誉值:268
信誉值:12
注册日期:2010-06-18 22:19 |
assume cs:code,ds:data
data segment
_str db 'Welcome masm!'
data ends
code segment
start:
mov ax,data
mov ds,ax
mov ax,0b800h
mov es,ax
mov si,offset _str
mov di,12*160+40*2 ;屏幕是80X25,所以,12行就是中间行,40列就是中间列
mov cx,lengthof _str
mov ah,2
s:
mov al,[si]
mov es:[di],ax
inc si
add di,2 ;由于一个字符占两个字节, 故加2
loop s
mov ah,4ch
int 21h
code ends
end start | | |
|
|
|
|
[第2楼]
[ 回复时间:2010-11-17 00:57 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-11-11 23:17 |
assume cs:code
data segment
db 'welcome to masm!'
data ends
code segment
start: mov ax,0b800h
mov ds,ax
mov ax,data
mov es,ax
mov si,0
mov bx,64
mov cx,16
s0:mov al,es:[si]
mov 1760[bx],al
mov 1920[bx],al
mov 2080[bx],al
mov byte ptr 1760[bx+1],02h
mov byte ptr 1920[bx+1],24h
mov byte ptr 2080[bx+1],71h
add bx,2
inc si
loop s0
mov ax,4c00h
int 21h
code ends
end start | | |
|