最近在听小鱼讲汇编,做到10.1实验题,出了个问题,请大神看看
assume cs:code,ds:datadata segment
db 'welcome',0
data ends
code segment
start: mov dh,1
mov dl,64H
mov cl,42H
mov ax,data
mov ds,ax ;指向字符串数据段
mov ax,0b800H
mov es,ax ;指向显存位置数据
mov si,0 ;si数据段偏移
mov di,0 ;di显存位置偏移
call show_str
mov ax,4c00H
int 21H
show_str:mov bx,0
mov ax,0
mov al,dh ;把输入的行数赋予ax
mov bx,0a0H ;把一行160个字节的数据赋予bx
mul bx ;相乘等到数赋予ax,偏移最大到25行,所以没超出寄存器
mov bl,dl
mov bh,0 ;把列数赋予bx
mov di,ax ;把值赋予di(显存偏移位置)
assume cs:code,ds:data
data segment
db 'welcome',0
data ends
code segment
start: mov dh,1
mov dl,64H
mov cl,42H
mov ax,data
mov ds,ax ;指向字符串数据段
mov ax,0b800H
mov es,ax ;指向显存位置数据
mov si,0 ;si数据段偏移
mov di,0 ;di显存位置偏移
call show_str
mov ax,4c00H
int 21H
show_str:mov bx,0
mov ax,0
mov al,dh ;把输入的行数赋予ax
mov bx,0a0H ;把一行160个字节的数据赋予bx
mul bx ;相乘等到数赋予ax,偏移最大到25行,所以没超出寄存器
mov bl,dl
mov bh,0 ;把列数赋予bxassume cs:code,ds:data
data segment
db 'welcome',0
data ends
code segment
start: mov dh,1
mov dl,64H
mov cl,42H
mov ax,data
mov ds,ax ;指向字符串数据段
mov ax,0b800H
mov es,ax ;指向显存位置数据
mov si,0 ;si数据段偏移
mov di,0 ;di显存位置偏移
call show_str
mov ax,4c00H
int 21H
show_str:mov bx,0
mov ax,0
mov al,dh ;把输入的行数赋予ax
mov bx,0a0H ;把一行160个字节的数据赋予bx
mul bx ;相乘等到数赋予ax,偏移最大到25行,所以没超出寄存器
mov bl,dl
mov bh,0 ;把列数赋予bx
mov di,ax ;把值赋予di(显存偏移位置)
mov ah,cl ;把颜色值赋予ah
s:mov cx,ds: ;判断字符中0的出现
mov ch,0
jcxz ok
mov al,ds: ;把字符赋予al
mov es:,ax ;把ax赋予显存位置
inc si
add di,2 ;高位放属性,低位放字符,所以要移动2位
loop s
ok:ret
code ends
end start
mov di,ax ;把值赋予di(显存偏移位置)
mov ah,cl ;把颜色值赋予ah
s:mov cx,ds: ;判断字符中0的出现
mov ch,0
jcxz ok
mov al,ds: ;把字符赋予al
mov es:,ax ;把ax赋予显存位置
inc si
add di,2 ;高位放属性,低位放字符,所以要移动2位
loop s
ok:ret
code ends
end start
mov ah,cl ;把颜色值赋予ah
s:mov cx,ds: ;判断字符中0的出现
mov ch,0
jcxz ok
mov al,ds: ;把字符赋予al
mov es:,ax ;把ax赋予显存位置
inc si
add di,2 ;高位放属性,低位放字符,所以要移动2位
loop s
ok:ret
code ends
end start
这个代码,可以实现显示字符串,,行号的改变也可以实现,但就是列号的改变怎么没反应,,请大神们指点一下,,我没看出什么问题,,谢谢
mov al,dh
mov bx,0a0H ;改为mov bl,0a0h
mul bx ;改为mul bl
mov bl,dl
用BX的话相乘结果改变了DX的值 造成后面的mov bl,dl改变
页:
[1]