实验9我的能现实吗
assume cs:codecode segment
start:mov ax,0b800h
mov ds,ax
mov bx,0640h
mov si,3fh
mov dl,'w'
mov ds:,dl
inc si
mov byte ptr ds:,00101000b
inc si
mov dl,'e'
mov ds:,dl
inc si
mov byte ptr ds:,00101000b
inc si
mov dl,'l'
mov ds:,dl
inc si
mov byte ptr ds:,00101000b
inc si
mov dl,'c'
mov ds:,dl
inc si
mov byte ptr ds:,00101000b
inc si
mov dl,'o'
mov ds:,dl
inc si
mov byte ptr ds:,00101000b
inc si
mov dl,'m'
mov ds:,dl
inc si
mov byte ptr ds:,00101000b
inc si
mov dl,'e'
mov ds:,dl
inc si
mov byte ptr ds:,00101000b
inc si
mov dl,' '
mov ds:,dl
inc si
mov byte ptr ds:,00101000b
inc si
mov dl,'t'
mov ds:,dl
inc si
mov byte ptr ds:,00101000b
inc si
mov dl,'o'
mov ds:,dl
inc si
mov byte ptr ds:,00101000b
inc si
mov dl,' '
mov ds:,dl
inc si
mov byte ptr ds:,00101000b
inc si
mov dl,'m'
mov ds:,dl
inc si
mov byte ptr ds:,00101000b
inc si
mov dl,'a'
mov ds:,dl
inc si
mov byte ptr ds:,00101000b
inc si
mov dl,'s'
mov ds:,dl
inc si
mov byte ptr ds:,00101000b
inc si
mov dl,'m'
mov ds:,dl
inc si
mov byte ptr ds:,00101000b
inc si
mov dl,'!'
mov ds:,dl
inc si
mov byte ptr ds:,00101000b
inc si
mov ax,4c00h
int 21h
code ends
end start
用了数据段以后可以,然后我用这个最笨的办法就出不来,是程序错误吗?求高手指教 assume cs:code
code segment
start:mov ax,0b800h
mov ds,ax
mov bx,0640h
mov si,3fh
把3f改成40h,在这里奇数内存是填写颜色属性,你恰好反了 本帖最后由 莫名其妙 于 2012-3-20 16:43 编辑
偶数位数据 奇数位颜色 这种方法算错一位就全乱了!~
不如直接给中间位置的偏移地址加到 段地址里
段地址=b8000h+行偏移640h+列偏移40h
然后取一个方便看和计算的比如B868:0这么算不容易错
本帖最后由 坏喵呜 于 2012-3-20 17:08 编辑
;我的程序
assume cs:code,ss:stack,ds:data
stack segment
db 16 dup(0)
stack ends
data segment
db 'welcome to masm!'
db 2h,24h,71h
data ends
code segment
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start: ;初始化
mov ax,stack
mov ss,ax
mov sp,16
mov ax,data ;数据区短地址
mov ds,ax
mov ax,0B000h ;显示缓冲区段地址
mov es,ax
mov bx,08000h ;显示缓冲区偏移地址
mov di,16 ;将显示的样式放到要打印的字符窜之后,偏移地址是10h
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;loop s 3次,因为是打印3次不同样式的'welcome to masm!'
mov cx,3
s: push cx ;保存cx
mov si,0 ;si用来定位data段的元素
mov dx,ds: ;取出打印样式
push di ;保存di
mov di,64 ;用来剧中打印字符串——32个空格,剧中(80-16)/2=32
mov cx,8 ;循环8次,8个字
s0: mov ax,ds: ;取出要打印的字符串
mov byte ptr es:,al ;获取第一个字符
inc di
mov byte ptr es:,dl ;给出打印样式
inc di
mov byte ptr es:,ah
inc di
mov byte ptr es:,dl
inc di
add si,2 ;后两个字符的起始地址
loop s0
add bx,160 ;另起一行打印
pop di ;获取当前样式
inc di ;下一个样式的地址
pop cx ;取得cx
loop s ;转移
mov ax,4c00h
int 21h
code ends
end start
页:
[1]