|
主题 : : 第九章,实验9 根据材料编程,大家探讨 [待解决] |
回复[ 6次 ]
点击[ 563次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2009-08-17 21:53 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-01-17 12:29 |
要求将welecome to masm!显示到屏幕中间。分别用绿色,绿底红色,白底蓝色
下面是我做的,大家分析看看有什么不对的地方:
assume cs:codesg,ds:datasg
datasg segment
db 'welcome to masm!'
datasg ends
codesg segment
begin:mov ax,datasg
mov ds,ax
mov si,0
mov di,0
mov cx,10H
mov ax,0B800H
mov es,ax
s:mov dl,ds:[si] ;把welcome to masm!字串逐一传入dx低地址中,dx高地址中进行字符属性定义
mov dh,02H ;绿色字
mov es:40H[di+0640H],dx ;40H是把welcome to masm显示到中间列,0640H表示第11行。
mov dh,24H ;绿底红字
mov es:40H[di+06E0H],dx ;第n行首地址为=(n-1)*A0H,(n为16进制)
mov dh,71H ;白底蓝字
mov es:40H[di+0780H],dx ;第13行首地址为(D-1)*A0H=780H
inc si
add di,2
loop s
mov ah,1
int 21h
mov ax,4c00h
int 21h
codesg ends
end begin | | |
|
|
|
|
[第1楼]
[ 回复时间:2009-08-19 14:39 ]
[引用]
[回复]
[ top ] | |
荣誉值:61
信誉值:4
注册日期:2008-10-14 16:29 |
没什么问题。
我觉得能够理解并完成任务就行了。每个人的思路都可能有差别。 | | |
|
|
|
|
[第2楼]
[ 回复时间:2010-01-11 06:45 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-10-07 14:18 |
assume cs:code,ds:data
data segment
db 'welcome to masm'
data ends
code segment
start: mov ax,data
mov ds,ax
mov ax,0
mov di,ax
mov ax,0b800h
mov es,ax
mov bx,0
mov ax,0ca00h
mov cx,32
s: mov es:[bx+1] ,ah
mov al,ds:[si+0]
mov es:[bx], al
add bx,2
add si,1
loop s
mov ax,4c00h
int 21h
code ends
end start | | |
|
|
|
|
[第3楼]
[ 回复时间:2010-01-12 18:52 ]
[引用]
[回复]
[ top ] | |
荣誉值:32
信誉值:0
注册日期:2008-01-15 12:22 |
颜色也是一种数据,从程序的逻辑和可扩展考虑,最好把颜色数据定义到数据点去。 | | |
|
|
|
|
[第4楼]
[ 回复时间:2010-01-13 01:38 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-10-07 14:18 |
呵呵我是新手可能我这样写是不好的习惯!!谢谢指正不好的一面!! | | |
|
|
|
|
[第5楼]
[ 回复时间:2010-01-26 02:47 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-10-07 14:18 |
经过一晚上的努务终与完成了呵呵真不容易发现自已的错误大家都来恭喜我吧代码始下
assume cs:code
data segment
db 'welcome to masm!',0
data ends
code segment
start: mov ax,data
mov ss,ax
mov sp,200h
mov dh,8
mov dl,3
mov cl,2
mov ds,ax
mov si,0
call show_str
mov ax,4c00h
int 21h
show_str: dec dh
dec dl
mov ax,0
mov al,dh
mov bx,0
mov bl,10
mul bl
mov bx,ax
mov ax,0b800h
add ax,bx
mov es,ax
mov ax,0
mov al,dl
add al,dl
mov bx,ax
mov di,0
mov ch,cl
ok: mov cl,[si]
push cx
mov ch,0
jcxz return
pop cx
mov es:[bx+di],cx
add di,2
inc si
jmp short ok
return: pop cx
ret
code ends
end start | | |
|
|
|
|
[第6楼]
[ 回复时间:2010-03-31 14:15 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-03-27 09:11 |
刚开始设字符显示段地址为ES:0B87Bh,只定位到第9行,但照每行160字节算,应该是第13行呀,这好像说明了每行不是160字节;后来加了640个字节改为0B8a3h,显示字符原样移到了第13行(即列没变),这有好像说明了每行是160字节呀。这是为什么呢? | | |
|