实验十(按需求行列 显示颜色字符
请问逻辑哪错了呀。为啥隔着字母显示这是我的代码
assume cs:code,ss:stack,ds:data
data segment
db'welcome to masm ',0
data ends
stack segment
dw 16 dup(0)
stack ends
code segment
start:
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov dh,8
mov dl,3
mov cl,2
mov si,0
mov ax,0b800h
mov es,ax;显示基地指
call show_str
mov ax,4c00h
int 21h
show_str:
mov al,160
mov ah,dh
mul ah
mov bx,ax
mov ah,0
mov al,2
mul dl;一个字符2b 列
add bx,ax;列行实际地址
mov al,cl;颜色储存在al
colour:
;检查字符串结束
mov ch,0
mov cl,
jcxz ok
mov ah,
mov es:,ah
mov es:.1,al
inc si
jmp short colour
ok:
ret
code ends
end start
dh存放要求行 dl列 assume cs:code,ss:stack,ds:data
data segment
db'welcome to masm ',0
data ends
stack segment
dw 16 dup(0)
stack ends
code segment
start:
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov dh,8
mov dl,3
mov cl,2
mov si,0
mov ax,0b800h
mov es,ax;显示基地指
call show_str
mov ax,4c00h
int 21h
show_str:
mov al,160
mov ah,dh
mul ah
mov bx,ax
mov ah,0
mov al,2
mul dl;一个字符2b 列
add bx,ax;列行实际地址
mov al,cl;颜色储存在al
colour:
;检查字符串结束
mov ch,0
mov cl,
jcxz ok
mov ah,
mov es:[bx],ah
mov es:[bx].1,al
add bx, 2
inc si
jmp short colour
ok:
ret
code ends
end start
改红色部分 本帖最后由 jackz007 于 2021-3-28 00:51 编辑
请彻底忘掉它们:最没有意义的代码
assume ss:stack
mov ax,stack
mov ss,ax
mov sp,32
这是我修改的代码
data segment para public 'DATA'
db 'welcome to masm ' , 0
data ends
stack segment para stack 'STACK'
dw 400h dup(00)
stack ends
code segment para public 'CODE'
assume cs:code , ds:data
show_str proc near
push bp
mov bp,sp
push ax
push bx
push cx
push dx
push si
push di
push ds
push es
lds si, ; 字符串首地址
mov ax,0b800h
mov es,ax
mov ax,word ptr; 显示位置行号(从 1 开始起算)
dec ax
mov cl,0a0h
mul cl
push ax
pop di
mov ax,word ptr; 显示位置列号(从 1 开始起算)
dec ax
shl ax,1
add di,ax
mov bx,word ptr; 低 8 位显示颜色编码
cld
s01: lodsb
or al,al
jz s02
stosb
mov al,bl
stosb
jmp short s01
s02: pop es
pop ds
pop di
pop si
pop dx
pop cx
pop bx
pop ax
mov sp,bp
pop bp
retn 0ah
show_str endp
main proc far
mov ax,data
mov ds,ax
push ds ; 字符串段地址
xor ax,ax
push ax ; 字符串段内偏移
mov ax,13
push ax ; 显示位置: 行号
mov ax,32
push ax ; 显示位置: 列号
mov ax,2
push ax ; 字符颜色
call show_str
xor ax,ax
int 016h
mov ax,4c00h
int 021h
main endp
code ends
end main
注意,我的代码会自动对号入座 ss 和 sp,而且,编译程序不会报 no stack 的警告。这才是一个汇编代码起码应该有的样子!在这方面,王爽的教程有着明显的缺陷,可以毫不客气地说,简直就是误人子弟! wtchou 发表于 2021-3-27 23:03
assume cs:code,ss:stack,ds:data
data segment
oo 谢谢 jackz007 发表于 2021-3-28 00:14
请彻底忘掉它们:最没有意义的代码
这是我修改的代码
哦哦 谢谢 可我暂时还看不懂你写的{:5_104:}
为啥会自动对应
页:
[1]