chexi 发表于 2019-3-10 13:39:22

一个汇编问题

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

                db 'Welcome to masm!'
                db 02h,24h,71h
               
data ends


stack segment

                dw 8 dup(0)
               
stack ends


code segment

start:
                mov ax,data
                mov ds,ax                 ;Making the ds become data segment
               
                mov ax,stack
                mov ss,ax                ;Making the ss point stack segment
               
                xor bx,bx                ;bx清零,用来索引颜色
                mov ax,0b872h        ;算出屏幕第12行中间的显存的起始位置放入ax中
               
                mov cx,3                ;s3循环控制行数,外循环为3次,因为要显示三个字符串
s3:                push cx                        ;三个进栈操作为外循环s3保存相关寄存器的值
                push ax                        ;以防它们的值在内循环中被破坏
                push bx
               
                mov es,ax                ;此时es为屏幕第12行中间的显存的段起始位置
               
                mov si,0                ;si用来索引代码列的字符
                mov di,0                ;di用来定位目标列
               
                mov cx,10h
                ;s1循环控制存放的字符,内循环为10h次,因为一个字符串中含10h个字节
s1:        mov al,ds:
                mov es:,al
                inc si
                add di,2
                loop s1                 ;次循环实现偶地址中存放字符
               
                mov di,1                ;di的值设为1,从而在显存奇地址中存放字符的颜色属性做准备
                pop bx
                mov al,ds:10h        ;取颜色属性
                inc bx
               
                mov cx,10h                ;第二个内循环也为10hci
s2:   mov es:,al
                add di,2
                loop s2                        ;此循环实现奇地址中存放字符的颜色属性
               
                ;以下4句为下一趟外循环做准备
                pop ax
                add ax,0ah                ;将显存的段起始地址设为当前行的下一行
                                                ;[在段地址中加0ah,相当于在偏移地址中加了0a0h(=160d)]
                pop cx
                loop s3
               
                mov ax,4c00h
                int 21h
               
code ends

end start
想问一下各位汇编大佬为什么照着小甲鱼的代码打,却没出现相应的效果,'welcome to masm'没能显示出来,用的是windows7操作系统

jackz007 发表于 2019-3-10 15:56:33

    可以的,代码没有问题,直接运行,不要用 debug 跟踪。

暗pluto 发表于 2019-3-10 17:59:58

对,跟踪是没办法出现结果的

chexi 发表于 2019-3-12 16:45:01


大佬,还是未能出现.....{:5_107:}

tiger_lu 发表于 2019-3-13 09:23:54

楼主,你用的是win7 32位吧?
win7开始就不能正确运行16位的程序啦,有两种办法:
    1. 使用xp运行 16位程序
    2. 在win7上装 DOSBox , 然后在 DOSBox 中运行 16位程序

chexi 发表于 2019-3-13 22:51:20


可是我发的另一个贴子的汇编代码,经过大佬们的指点后,在windows7上是可以运行的。而且也有图案的......
页: [1]
查看完整版本: 一个汇编问题