汇编实验10.1不显示
完全照抄小甲鱼视频代码,但是执行后什么都没有输出。问题出在哪里,请大大指点:assume cs:code
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 ;SI用于索引数据段,定位在0 'W'处
call show_str
mov ax,4c00h
int 21h
show_str: push cx
push si
mov al,0a0h ;每行A0个字节(160)
dec dh ;定位第8行开始,从0开始故减1
mul dh ;计算开始行字符数,被乘数AL,160*7=1120,保存在AX中
mov bx,ax ;BX保存AX的1120
mov al,2 ;定义写入每个单元为2个字符,低位ASCII码,高位属性
mul dl ;定位开始字符位置,2*3=6,被乘数AL
sub ax,2 ;开始字符从0开始故-2个字符,6-2=4,保存在AX中
add bx,ax ;定位开始字符为第7行(0行开始)第2个字(0字符开始),1120+4=1124,相加后保存在BX中
mov ax,0B800h ;定位写入的内存单元B800H,显存开始处
mov es,ax ;将显存开始处保存在ES中
mov di,0 ;DI指向写入目标内存地址的索引,开始置零
mov al,cl ;把颜色属性保存在AL中
mov ch,0 ;CX高位CH置零
s: mov cl,ds: ;CX低位CL保存数据段SI
jcxz ok ;如果CX为0,跳转至OK标号
mov es:,cl ;把CL中保存的数据写入目标地址 B800:0464(1124)处
mov es:,al ;把属性写入目标地址 B800:0465(1125)处
inc si ;SI递增1,指向数据段下一个内存单元
add di,2 ;DI递增2,指向目标地址下一个字单元
jmp short s ;跳转至S标号,继续操作下一个字符
ok: pop si
pop cx
ret
code ends
end start 我测试了,可以显示啊,但是我不知道题目的意思是什么。 本帖最后由 yuxinajie 于 2020-6-20 15:55 编辑
yjcoke 发表于 2020-6-20 09:22
我测试了,可以显示啊,但是我不知道题目的意思是什么。
是在屏幕第八行用绿色显示 Welcome to masm!
为啥我执行后什么都没有发生{:5_99:} 小甲鱼有这代码?我咋没见过?而且太复杂看不懂 405794672 发表于 2020-6-23 16:04
小甲鱼有这代码?我咋没见过?而且太复杂看不懂
小甲鱼的汇编视频 本帖最后由 sbx 于 2020-8-17 20:41 编辑
;问题
;显示字符串是现实工作中经常要用到的功能,应该编写一个通用的子程序来实现这个功能。我们应该提供
;灵活的调用接口,使调用者可以决定显示的位置(行、列)、内容和颜色
;子程序描述
;名称:show_str
;功能:在指定的位置,用指定的颜色,显示一个用0结束的字符串。
;参数(dh)=行号(取值范围0~24),(dl)=列号(取值范围0~79),
;(cl)=颜色,ds:si指向字符串的首地址。
;返回:无
;应用举例:在屏幕的8行3列,用绿色显示data段中的字符串。
assume cs:code
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
mov ax,0b800h
mov es,ax
mov al,dh
mov ah,160
mul ah
mov bx,ax
mov al,dl
mov ah,2
mul ah
add bx,ax
mov di,0
s0:mov cl,
mov ch,0
jcxz s
mov al,
pop cx
mov ah,cl
mov es:,ax
inc si
add di,2
push cx
jmp short s0
s:ret
code ends
end start
页:
[1]