yuxinajie 发表于 2020-6-20 01:05:57

汇编实验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

yjcoke 发表于 2020-6-20 09:22:28

我测试了,可以显示啊,但是我不知道题目的意思是什么。

yuxinajie 发表于 2020-6-20 15:54:09

本帖最后由 yuxinajie 于 2020-6-20 15:55 编辑

yjcoke 发表于 2020-6-20 09:22
我测试了,可以显示啊,但是我不知道题目的意思是什么。

是在屏幕第八行用绿色显示 Welcome to masm!
为啥我执行后什么都没有发生{:5_99:}

405794672 发表于 2020-6-23 16:04:24

小甲鱼有这代码?我咋没见过?而且太复杂看不懂

yuxinajie 发表于 2020-6-25 23:33:17

405794672 发表于 2020-6-23 16:04
小甲鱼有这代码?我咋没见过?而且太复杂看不懂

小甲鱼的汇编视频

sbx 发表于 2020-8-17 20:38:26

本帖最后由 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]
查看完整版本: 汇编实验10.1不显示