destiny 发表于 2012-9-4 08:30:12

实验9出现16位MS-DOS子系统错误,急求大牛赐教!

本帖最后由 destiny 于 2012-9-5 09:48 编辑

assume cs:code,ds:data,ss:stack

data segment
   db 'welcome to masm'
   db2H,24H,71H
data ends

stack segment
dw 0,0,0,0,0,0,0,0
stack ends

code segment
    start:mov ax, data
       mov ds, ax
    mov ax, stack
    mov ss, ax
    mov sp, 10H
   
   
    mov ax, 0B872H
    mov bx, 0
    mov si, 0                ;定义字符串偏移地址
    mov di, 0
    mov cx, 3             ;外层循环
      
    s1:push cx
          push ax
   
    mov es, ax
    mov cx, 16
   
s:mov al,                ;内层循环设置字符串 3行一起设置了   
    mov es:, al
    add di, 2
    inc si
    loop s
   
   
    pop ax
    add ax,0aH
    pop cx
    loop s1
   
    mov ax, 0B872H
    mov es, ax
    mov cx, 3
       mov bx, 0
   
   
    s3:push cx
    push ax
    mov di, 1
   
    mov cx, 10H
    mov al,     ;索引到颜色后传送给al
   
    s2:mov es:, al               ;这里就开始设置颜色属性一样3个一起设置了
       add di, 2
    loop s2
   
   
    pop ax
    add ax, 0aH         ;进入下一行
    inc bx            ;索引下一个颜色字节
    pop cx
    loop s3
   
    mov ax, 4c00H
    int 21
   
code ends
end start
   
   
    请大牛解释下是我编程代码出现问题了还是系统存在问题如果代码有问题 请大牛详细解释下再次感谢。
    还有就是我把小甲鱼在视频里的那段代码也照着写了。编译完运行还是这个错误 如果我的代码有问题 那甲鱼老师在视频里还是可以显示的,我编译完运行就显示错误郁闷就郁闷在这里了
   
   

梦幻羽羽 发表于 2012-9-4 08:30:13

assume cs:codesg, ds:datasg
datasg segment
db 'welcome to masm!'
datasg ends
codesg segment
start: mov ax, datasg
       mov ds, ax
           mov ax, 0b800h
           mov es, ax
           mov cx, 16
           mov di, 0
           mov bx, 0
color:mov bp, 0aa0h
       mov al,
       mov es:, al
       mov byte ptr es:, 02h
           mov bp, 0b40h
           mov al,
           mov es:, al
           mov byte ptr es:, 24h
           mov bp, 0be0h
           mov al,
           mov es:, al
           mov byte ptr es:, 71h
           inc bx
           add di, 2
           loop color
           mov ax, 4c00h
           int 21h
codesg ends
end start

梦幻羽羽 发表于 2012-9-4 20:45:23

呵呵楼主

你的程序存在错误哦~   我以修正了~

如有问题请联系我,我的个性签名有我qq

destiny 发表于 2012-9-5 08:22:16

梦幻羽羽 发表于 2012-9-4 20:47 static/image/common/back.gif


80X25有80列 25行 要求居中也就是说这三行代码是保存在 第12 13 14行也要在列里居中也就是说要从第12行开始+列中的居中的偏移量   第12行的地址是0B86E0H还在要列中居中 字符串占16字节 属性颜色占16 ,也就是说前面要隔开64个字节中间是字符串和颜色 后面在隔开64字节 这样才对! 你的代码有问题

梦幻羽羽 发表于 2012-9-5 12:39:24

...你自己编译下就知道了

梦幻羽羽 发表于 2012-9-5 12:40:16

还有就是你没理解清楚。   你好好去看书上的解释

梦幻羽羽 发表于 2012-9-5 12:49:42

还有就是我的代码是100%没问题,   我纳闷的是你纠结寻址方式~   

destiny 发表于 2012-9-6 09:09:00

梦幻羽羽 发表于 2012-9-5 12:49 http://bbs.fishc.com/static/image/common/back.gif
还有就是我的代码是100%没问题,   我纳闷的是你纠结寻址方式~

我感觉你这个程序的思路好强大,代码优化的也比较少! 但是你要考虑下我这个新手 !我的思路就是把所有的字符串全写进去然后下面一个循环把颜色全写进去其实思路上也没有错但是在实际操作中出现了错误 请你这位大牛帮我分析下代码 到底是错在了什么地方毕竟你写的代码是你的 我自己写出来 搞明白了才是自己的知识 以后再碰到这种问题我也会解决了再次感谢你

walykyy 发表于 2012-9-6 10:30:17

梦幻羽羽 发表于 2012-9-4 20:47 static/image/common/back.gif


代码写的也不够完美,这个是显示3种颜色,要是显示3万种颜色呢?您的写到什么时候?

walykyy 发表于 2012-9-6 11:02:02

本帖最后由 walykyy 于 2012-9-6 11:04 编辑

楼主太不认真了,你看小甲鱼的视频也没仔细看吧,我简单看了一下漏洞百出,错误太多

http://www.asmedu.net/blog/user/usermain.jsp?neighborId=37937我的博客可以看下我写的,简单易懂,有注释告诉你一个简单的思路:你可以先welcome to masm!打印在中间,然后添加一种颜色,没有问题后,在打印3次welcome to masm!,都显示一种颜色,在更换成3种颜色

梦幻羽羽 发表于 2012-9-6 18:56:22

代码写的也不够完美,这个是显示3种颜色,要是显示3万种颜色呢?您的写到什么时候?

楼主我问个问题,你认为会用这种方式来写吗?   这只是前期,   只是让你熟悉寻址和 了解下b800这个段地址里的功能,   如果你是来找毛病的对不起,   我无法回答,    你的问题太深奥, 在下不知道怎么回答,
3万种颜色呢?      呵呵,你是说开发什么大型软件,还是真是问个问题?

destiny 发表于 2012-9-7 09:58:38

梦幻羽羽 发表于 2012-9-6 18:56 static/image/common/back.gif
楼主我问个问题,你认为会用这种方式来写吗?   这只是前期,   只是让你熟悉寻址和 了解下b800这个 ...

博客进不去 也注册不了
页: [1]
查看完整版本: 实验9出现16位MS-DOS子系统错误,急求大牛赐教!