王爽《汇编语言》实验10第一个子程序,可以正常退出,但不能按要求显示字符,始终不解,望高手指点

debugkkk 2008-05-25 05:12:31
这是按王爽老师的《汇编语言》第10章实验10第一个小字程序要求写的代码,要求在屏幕的8行3列,用绿色显示data段中的字符串。

程序代码如下,debug后-d bd06:0000,显示Welcome to masm!已经拷贝过去,但不知道为什么就是不显示,程序可以正常退出。各位高手,有空的话帮忙看看程序吧,谢谢啦~

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:

mov ax,0b800h
mov di,0
mov bl,cl

mov ch,0
mov cl,dh
s1:
add ax,160
loop s1

mov cl,dl
s2:
add ax,2
loop s2
mov es,ax

s3:
mov ah,bl
mov al,[di]
mov es:[si],ax

mov cl,[di]
jcxz ok
inc di
add si,2
jmp short s3

ok:
ret

code ends
end start
...全文
182 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
debugkkk 2008-05-28
  • 打赏
  • 举报
回复
分给了,谢谢大家都指点。
dongyi940333 2008-05-27
  • 打赏
  • 举报
回复
2楼的代码是不是原书带的例子?

--------------------------

不是的,是俺自已写的
debugkkk 2008-05-26
  • 打赏
  • 举报
回复
谢谢楼上两位,明天早上再来研究!
fhb13 2008-05-26
  • 打赏
  • 举报
回复
2楼的代码是不是原书带的例子?
dongyi940333 2008-05-25
  • 打赏
  • 举报
回复


;--------------------------------------------------------------------------------------------------------------------
; Nmae: 1.asm
;
; Description: 在指定的位置,用指定的颜色,显示一个用0结束的字符串.
;
; 子程序描述: (dh) = 行号(取值范围0-24).
;
; (dl) = 列号(取值范围0-79).
;
; (cl) = 颜色,ds:si指向字符串的首地址.
;
; Date: 2007-9-3
;--------------------------------------------------------------------------------------------------------------------

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:

mov bx, 0B800h

mov es, bx

mov al, 0A0h

dec dh

mul dh ;计算行地址

mov di, ax ;保存偏移地址

mov al, 2h

dec dl

mul dl ;计算列地址

add di, ax ;计算行和列的地址



write:
mov bl, [si] ;读字符串

cmp bl, 0

jz return ;字符为零则表示显示完

mov byte ptr es:[di], bl ;将字符写入显存

mov byte ptr es:[di+1], cl ;写入字符的颜色

inc si ;下一个字符

add di, 2 ;字符的下一个偏移地址

jmp write



return:

ret

code ends

end start

BAYNPU 2008-05-25
  • 打赏
  • 举报
回复
看看吧:
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
push si
mov al,0A0h
dec dh
mov bx,ax
mov al,2
mul dl
sub ax,2
add bx,ax
mov ax,0B800h
mov es,ax
mov di,0
mov al,cl
mov ch,0
s: mov cl,ds:[si]
jcxz ok
mov es:[bx+di],cl
mov es:[bx+di+1],al
inc si
add di,2
jmp short s
ok: pop si
pop cx
ret
code ends
end start

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧