|
主题 : : 实验9 欢迎交流 [待解决] |
回复[ 5次 ]
点击[ 297次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2012-12-28 13:18 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:2
注册日期:2011-09-18 20:07 |
assume cs:code
data segment
db 'welcome to masm!'
data ends
color segment
dw 00000010B ;绿色
dw 00100100B ;绿底红色
dw 01110001B ;白底蓝色
color ends
stack segment
dw 8 dup(0)
stack ends
code segment
start:
mov ax, color
mov ds, ax
mov ax, data
mov es, ax
mov ax, stack
mov ss, ax
mov sp, 10h
push ds:[4]
push ds:[2]
push ds:[0]
mov ax, 0B800H
mov ds, ax
mov bx, 780h ;第12行 dos默认为80×25,第12行为中间行
mov cx, 3
display:
pop dx
push cx
mov si, 40h ;每次从第40h单元开始写字符,显示在中间
mov di, 0 ;di作为welcome字符串的偏移指针
mov cx, 10h
perrow:
mov al, es:[bp][di]
mov [bx][si], al
inc si
inc di
mov [bx][si], dl
inc si
loop perrow
pop cx
add bx, 0a0h ;继续下一行
loop display
mov ax, 4c00h
int 21h
code ends
end start | | |
|
|
|
|
[第1楼]
[ 回复时间:2012-12-28 13:21 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:2
注册日期:2011-09-18 20:07 |
|
|
|
|
|
[第2楼]
[ 回复时间:2012-12-28 13:57 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:2
注册日期:2011-09-18 20:07 |
这里对显示到中间的理解可能有点问题,又重新计算了一下
一共25行,中间行为12,13,14行,dos屏幕以第0开始记第一行
转为11,12,13为中间行
每行偏移为a0h, 11*10=110 110/16=6 余14 11行偏移为6E0h
计算第24行偏移 24*10=240 240/16=15 24行偏移为F00h, 与书上保持一致
以上代码应将 mov bx, 780h ;第12行 dos默认为80×25,第12行为中间行
修改为 mov bx, 6e0h ;第12行 dos默认为80×25,第12行为中间行 | | |
|
|
|
|
[第3楼]
[ 回复时间:2012-12-28 14:01 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:2
注册日期:2011-09-18 20:07 |
再粘贴一下修改的代码
assume cs:code
data segment
db 'welcome to masm!'
data ends
color segment
dw 00000010B ;绿色
dw 00100100B ;绿底红色
dw 01110001B ;白底蓝色
color ends
stack segment
dw 8 dup(0)
stack ends
code segment
start:
mov ax, color
mov ds, ax
mov ax, data
mov es, ax
mov ax, stack
mov ss, ax
mov sp, 10h
push ds:[4]
push ds:[2]
push ds:[0]
mov ax, 0B800H
mov ds, ax
mov bx, 6e0h ;第11行 dos默认为80×25,第11行为起始
mov cx, 3
display:
pop dx
push cx
mov si, 40h ;每次从第40h单元开始写字符,显示在中间
mov di, 0 ;di作为welcome字符串的偏移指针
mov cx, 10h
perrow:
mov al, es:[bp][di]
mov [bx][si], al
inc si
inc di
mov [bx][si], dl
inc si
loop perrow
pop cx
add bx, 0a0h ;继续下一行
loop display
mov ax, 4c00h
int 21h
code ends
end start | | |
|
|
|
|
[第4楼]
[ 回复时间:2012-12-28 14:02 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:2
注册日期:2011-09-18 20:07 |
|
|
|
|
|
[第5楼]
[ 回复时间:2012-12-28 20:39 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2012-12-03 17:03 |
assume cs:zhizhen
shuju segment
db 'welcome to masm!';02h,24h,71h
shuju ends
zhizhen segment
kais: mov ax,shuju
mov ds,ax
mov ax,0b800h
mov es,ax
mov si,0
mov di,720H
mov cx,16
x: mov al,ds:[si]
mov word ptr es:[di],ax
mov word ptr es:[di+160],ax
mov ah,71H
mov word ptr es:[di+320],ax
inc si
add di,2
loop x
mov ax,4c00h
int 21h
zhizhen ends
end kais | | |
|