- [游客] 你说的就是传说中的易语言么?(*^__^*) 嘻嘻…… 03/22 21:44
- [taotling] 你啊,肯定是太贪快,所以细节上的东西没注意。。。。 来晚了,报个到。 04/09 23:46
- [wdm] mov es:[di],cx ;原来是mov es:[di],cl mov es:[ 04/09 15:11
- [wdm] 看到内存b850:0006处的变化真的很奇怪 ============= 数据必然都是你些进入的 04/09 14:41
- [wdm] 我不明白为什么sp=4的时候,用t单步就会错?明明堆栈还有2个字的空间啊?! --------- 04/09 14:34
- [wdm] 书里哪里说过吗?还有没什么会出现这个情况?按理说,堆栈不是还有2个字的位置吗? ========= 04/09 14:30
- [hantangtianxia] debug跟踪的问题 如果直接运行或debug g命令 执行,不会出问题 04/08 23:17
- [rsice] wdm:博主看看这里的sp的值,mov dx,0000后的T命令的时候,你的sp只剩下4了,记得前面 04/08 23:12
- [游客] 功能子程序dtoc中应该添加保护现场和恢复现场语句序列! 答:确实没有保护现场,我觉得可能下面的 04/08 21:18
- [游客] 将行偏移添加到了段地址中?!应该把行、列偏移都放在偏移地址寄存器di中。 答:是这样的,我是把行 04/08 21:17
[2008-04-01 23:20] 王爽汇编语言第10章实验10子程序1:显示字符串
;(dh)=行号,取值范围0~24
;(dl)=列号,取值范围0~79
;(cl)=颜色,ds:si指向字符串的首地址
; 例子:在屏幕第8行,3列,用绿色显示data段中的字符串
assume cs:code,ds:data,ss:stack
data segment
db 'Welcome to masm!',0
data ends
stack segment
db 16 dup (0)
stack ends
code segment
start: mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,16
mov dh,8
mov dl,3
mov cl,2
mov si,0
mov ch,0
push cx
call show_str
mov ax,4c00h
int 21h
show_str: push bp
mov bp,sp
mov ax,0
mov al,dh
mov bl,0ah
mul bl
mov bx,0b800h
add bx,ax
mov es,bx ;定位字符串起始行的位置
mov ax,0
mov al,dl
mov bh,0
mov bl,2
mul bl
mov di,ax ;定位字串起始列的位置
mov ax,[bp+4] ;ax放颜色参数
s: mov cl,ds:[si] ;以si作为字符串首地址,送入cl
jcxz over ;处理完毕就结束子程序,否则处理
mov es:[di],cl ;送入目标位置
mov es:[di+1],al ;把颜色参数送入
inc si
add di,2
jmp short s
over: pop bp
ret 2
code ends
end start
特别要请教大家的是:这个程序可以我用td调试了,如果在call时用不进入子程序,步过,程序没有问题,运行终止,但是如果进入子程序,那么执行到-mov es:[di],cl这一句是,程序终止,真是奇怪,我想在看看内存b850:0006处的内容,说没找到,由此我想可能是td无法读写b850:0006处的内容,请大家帮我!
[ xiaochong 发表于 2008-04-02 09:45 ]
不知道博主所说的“td”指的什么?
博主的程序,我已在debug下进行了单步跟踪,没有博主所说的问题。
b850:0006 是显存地址,是可以读写的,在此处还是不明白博主所说的“td无法读写b850:0006处的内容”指的什么意思,请继续说明。
还有一点,博主在写子程序时,应该把除传参数用到的寄存之外的在子程序中使用的寄存器,应该用PUSH保护起来...
[ rsice 发表于 2008-04-02 11:55 ]
谢谢xiaochong的指点!保护寄存器我以后会注意的
td是borland公司出的调试器,turbo debugger,功能比debug强的多。我说“无法读写b850:0006处的内容”是我猜的,因为我在td下无法查看内存b850:0006的内容。我发了文章后,又用debug调试了下,奇怪的是debug倒是可以查看b850:0006的内容,不过好像也不能“善终”而且运行到mov al,dl 这一句就挂了。真是奇怪!
[ rsice 发表于 2008-04-02 12:10 ]
我刚才在另一台电脑上用td调试了一下,完全正常!
我基本上明白原来了:我是用tasm编译的程序,用td调试就没有问题,我原来是用masm编译的程序,用td调试就有问题,毕竟不是一家人啊!
[ crazyman 发表于 2008-04-04 11:08 ]
还有这么一说呢?
期待天下大同,省的这么麻烦了。呵呵