|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
代码如下:检查了没找到有问题,可是不显示结果,跟我是64位系统有关系吗。但是最下面的程序却显示,怎么回事呢。
assume cs:code,ds:data
data segment
db 'Welcome to masm!',0
data ends
code segment
start: mov dh,8
mov dl,3
mov cl,2
mov ax,data
mov ds,ax
mov si,0
call show_str
mov ax,4c00h
int 21h
show_str: push cx
push bp
push bx
mov bl,cl ;存颜色
mov bh,0
mov ax,0b800h
mov es,ax
mov bp,0
mov al,0ah ;确认行数
dec dh
mul dh
mov bp,ax
mov dh,0 ;确认列数
dec dl
add dl,dl
add bp,dx
s: mov cl,[si]
mov ch,0
jcxz ok
;mov al,cl
mov byte ptr es:[bp+di],cl
;mov ah,bl
mov byte ptr es:[bp+1+di],bl
inc si
add di,2
loop s
ok: pop bx
pop bp
pop cx
ret
code ends
end start
这是实验9,这个可以显示出来
assume cs:codesg,ds:datasg
datasg segment
db 'welcome to masm!'
datasg ends
codesg segment
start: mov ax,datasg
mov ds,ax
mov ax,0b800h
mov es,ax
mov si,0720h
mov bx,0
mov cx,16
s: mov al,byte ptr [bx]
mov byte ptr es:[si],al
mov ah,2
mov byte ptr es:[si+1],ah
mov byte ptr es:[si+0A0H],al
mov ah,36
mov byte ptr es:[si+0A0H+1],ah
mov byte ptr es:[si+0A0H+0A0H],al
mov ah,113
mov byte ptr es:[si+0A0H+0A0H+1],ah
inc bx
add si,2
loop s
mov ax,4c00h
int 21h
codesg ends
end start
本帖最后由 wtchou 于 2020-11-14 09:32 编辑
assume cs:code,ds:data
data segment
db 'Welcome to masm!',0
data ends
code segment
start: mov dh,8
mov dl,3
mov cl,2
mov ax,data
mov ds,ax
mov si,0
call show_str
mov ax,4c00h
int 21h
show_str: push cx
push bp
push bx
mov bl,cl ;存颜色
mov bh,0
mov ax,0b800h
mov es,ax
mov bp,0
mov al,0a0h ;确认行数
dec dh
mul dh
mov bp,ax
mov dh,0 ;确认列数
dec dl
add dl,dl
add bp,dx
s: mov cl,[si]
mov ch,0
jcxz ok
;mov al,cl
mov byte ptr es:[bp+di],cl
;mov ah,bl
mov byte ptr es:[bp+1+di],bl
inc si
add di,2
loop s
ok: pop bx
pop bp
pop cx
ret
code ends
end start
-----------------------------------------------------------------------
修改红色部分, 即可正常执行
不过如同 2, 3 楼大大们所述
loop s 应改用 jmp
di 应设初始值
才是较正确的思路
如下:
assume cs:code,ds:data
data segment
db 'Welcome to masm!',0
data ends
code segment
start: mov dh,8
mov dl,3
mov cl,2
mov ax,data
mov ds,ax
mov si,0
call show_str
mov ax,4c00h
int 21h
show_str: push cx
push bp
push bx
mov bl,cl ;存颜色
mov bh,0
mov ax,0b800h
mov es,ax
mov bp,0
mov al,0a0h ;确认行数
dec dh
mul dh
mov bp,ax
mov dh,0 ;确认列数
dec dl
add dl,dl
add bp,dx
mov di, 0
s: mov cl,[si]
mov ch,0
jcxz ok
;mov al,cl
mov byte ptr es:[bp+di],cl
;mov ah,bl
mov byte ptr es:[bp+1+di],bl
inc si
add di,2
jmp short s
ok: pop bx
pop bp
pop cx
ret
code ends
end start
|
|