wawa 发表于 2012-12-17 15:34:45

编译出了问题具体请看代码

data segment
time: db 'yy/mm/dd hh:mm:ss','$'
table: db 9,8,7,4,2,0
data ends
编译的时候 先用masm编译然后用link链接没有问题 但用ML编译链接就会出现

将里面的冒号去掉就没有问题了 如果将上面的第二行和第三行代码放在code segment 里面有冒号没有问题


ycg 发表于 2012-12-17 15:34:46

反正放入data段就不要加冒号了,那只是编译器的原因吧,不用纠结

浅塘半亩 发表于 2012-12-17 15:36:59

6.15版本的语法本来就有问题

wawa 发表于 2012-12-17 15:43:55

那个冒号是加的对 还是不加的对呢

lyoal 发表于 2012-12-17 22:51:14

兄弟,我没有见过在数据定义字段要用标号的。可能是我见识浅漏吧。如果你认为数字符不方便,可以0字符尾,代码段中加入条件判断转移指令(jcxz)就可以了,不必那么麻烦。

wawa 发表于 2012-12-18 08:58:22

lyoal 发表于 2012-12-17 22:51 static/image/common/back.gif
兄弟,我没有见过在数据定义字段要用标号的。可能是我见识浅漏吧。如果你认为数字符不方便,可以0字符尾,代 ...

这个是实验14里面的代码,我以前也没有用过

lyoal 发表于 2012-12-18 13:16:28

wawa 发表于 2012-12-18 08:58 static/image/common/back.gif
这个是实验14里面的代码,我以前也没有用过

兄弟,你强大,进度好快。记得你第一个问题好像前几章,现在已经进入十四章了。历害,我现在才到十三章。来帮我解决个问题:
assume cs:code
code segment
start:        mov ax,cs                                ;定义复制源
                mov ds,ax
                mov si,offset sub0
               
               
                mov ax,0                                ;定义复制目的地址
                mov es,ax
                mov di,200h
               
                mov cx,offset ok - offset sub0
                cld                                                ;复制方向
                rep movsb
               
                mov ax,0                                ;设置中断向量
                mov es,ax
                mov word ptr es:,200h
                mov word ptr es:,0h
               
                ;测试一下
                int 7ch
               
                mov ax,4c00h
                int 21h
               
sub0:        jmp short s
                db "Weclome to masm!",0
               
s:                mov ax,0b800h
                mov es,ax
                mov di,12*160+36*2
               
                mov ax,cs
                mov ds,ax
                mov si,202h
               
                mov al,02h
s0:                mov ch,0
                mov cl,ds:
                jcxz short ok
               
                mov byte ptr es:,cl
                mov byte ptr es:,al
                inc si
                add di,2
                jmp short s0
               
       
               
                mov ax,4c00h
                int 21h
               
ok:                nop
                iret
               
               
                code ends
end start



这个老运行错误,以我的水平实在是找不到原因在那里。牛人帮忙指点一下

wawa 发表于 2012-12-18 16:05:21

lyoal 发表于 2012-12-18 13:16 static/image/common/back.gif
兄弟,你强大,进度好快。记得你第一个问题好像前几章,现在已经进入十四章了。历害,我现在才到十三章。 ...

安装程序有错误,少安装了几个代码
mov cx,offset ok - offset sub0 改成 mov cx,offset subend - offset sub0
在iret下面加一个 subend: nop
最近工作不忙,就囫囵吞枣的多看了一些,我不是大牛,很想成为,但水平不够

lyoal 发表于 2012-12-18 17:34:23

:'(,我真够蠢的,眼神肯定有问题。我比对的是我自己的代码,代码中最后没有IRET代码。纠结!非常感谢,以后请多指教!

wawa 发表于 2012-12-18 19:58:51

lyoal 发表于 2012-12-18 17:34 static/image/common/back.gif
,我真够蠢的,眼神肯定有问题。我比对的是我自己的代码,代码中最后没有IRET代码。纠结!非常感谢,以后 ...

一起学习,共同进步

lyoal 发表于 2012-12-19 00:14:21

wawa 发表于 2012-12-18 19:58 static/image/common/back.gif
一起学习,共同进步

再次求助一下,十三章的一个例题,一直还是搞不懂,没办法智商就这么高了。朋友帮忙看一下,问题在那里?再次表示感谢!
assume cs:code
code segment
start:               
;===============中断处理程序=========================================
                        mov ax,0                                                ;安装中断处理程序
                        mov es,ax
                        mov di,200h
                       
                        mov ax,cs
                        mov ds,ax
                        mov cx,offset s1end - offset s1        ;传送数据所用到的偏移地址
                       
                        cld                                                                ;数据传送方向
                        rep movsb                                                ;开始传送数据
                       
                        mov ax,0                                                ;定义中断向量
                        mov es,ax
                        mov word ptr es:,200h        ;程序入口偏移地址
                        mov word ptr es:,0                ;程序入口段地址

                       
;============以下为主程序================================================                       


                        mov ax,0b800h                                        ;定义显存位置
                        mov es,ax
                        mov di,160*12
                        mov bx,offset s - offset send
                        mov cx,80
                       
        s:                mov byte ptr es:,'!'                ;执行程序
                        mov byte ptr es:,41h
                        add di,2
                        int 7ch                                                        ;中断7ch,调用中断处理程序

                        mov ax,4c00h
                        int 21h               
        send:        nop
                                               
;============需要安装的处理程序============================================
        s1:                push bp
                        mov bp,sp
                        dec cx
                        jcxz ok
                        add ,bx
                        ;这个是地方是不是要加一条指令,使cpu指向s标号处执行循环呢?
                       
                       
        ok:                pop bp
                        iret
                       
        s1end:        nop
                       
                        code ends
end start

wawa 发表于 2012-12-19 09:53:05

lyoal 发表于 2012-12-19 00:14 static/image/common/back.gif
再次求助一下,十三章的一个例题,一直还是搞不懂,没办法智商就这么高了。朋友帮忙看一下,问题在那里? ...

第九行和第十行就少了一条代码,mov si,offset s1end 你再编译看看,还有问题 我再帮你看

wawa 发表于 2012-12-19 11:00:53

看到第16章第289页知道了当初是否加冒号的问题所在了,
书上原话为“在后面加有冒号的地址标号,只能在代码段中,不能在其它段中使用”
页: [1]
查看完整版本: 编译出了问题具体请看代码