实验十 无法显示结果
代码如下:检查了没找到有问题,可是不显示结果,跟我是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,
mov ch,0
jcxz ok
;mov al,cl
mov byte ptr es:,cl
;mov ah,bl
mov byte ptr es:,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
mov byte ptr es:,al
mov ah,2
mov byte ptr es:,ah
mov byte ptr es:,al
mov ah,36
mov byte ptr es:,ah
mov byte ptr es:,al
mov ah,113
mov byte ptr es:,ah
inc bx
add si,2
loop s
mov ax,4c00h
int 21h
codesg ends
end start loop s
cx没设定
建议 用jump 指令 di 没有初始值 本帖最后由 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,
mov ch,0
jcxz ok
;mov al,cl
mov byte ptr es:,cl
;mov ah,bl
mov byte ptr es:,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,
mov ch,0
jcxz ok
;mov al,cl
mov byte ptr es:,cl
;mov ah,bl
mov byte ptr es:,bl
inc si
add di,2
jmp short s
ok: pop bx
pop bp
pop cx
ret
code ends
end start
本帖最后由 panzhen 于 2020-11-14 17:07 编辑
“或许” 发表于 2020-11-13 19:52
cx没设定
建议 用jump 指令
mov cx,0
mov di,0
s: mov cl,
mov ch,0
jcxz ok
这个意思吗,还是不显示,哦知道怎么回事了,如四楼所说,还是自己写错了 嗯,之前写的JMP,后来改成LOOP了
di设初值也是没发现,给忘了。
但是CX不用了吧,
mov cl,
mov ch,0
这两行不就算定义了。
页:
[1]