鱼C论坛

 找回密码
 立即注册
查看: 2077|回复: 3

实验9我的能现实吗

[复制链接]
发表于 2012-3-20 07:45:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
assume cs:code
code segment
start:mov ax,0b800h
      mov ds,ax
      mov bx,0640h
      mov si,3fh
      mov dl,'w'
      mov ds:[bx+si],dl
      inc si
      mov byte ptr ds:[bx+si],00101000b
      inc si
      mov dl,'e'
      mov ds:[bx+si],dl
      inc si
      mov byte ptr ds:[bx+si],00101000b
      inc si
      
      mov dl,'l'
      mov ds:[bx+si],dl
      inc si
      mov byte ptr ds:[bx+si],00101000b
      inc si
      mov dl,'c'
      mov ds:[bx+si],dl
      inc si
      mov byte ptr ds:[bx+si],00101000b
      inc si
      mov dl,'o'
      mov ds:[bx+si],dl
      inc si
      mov byte ptr ds:[bx+si],00101000b
      inc si
      mov dl,'m'
      mov ds:[bx+si],dl
      inc si
      mov byte ptr ds:[bx+si],00101000b
      inc si
      mov dl,'e'
      mov ds:[bx+si],dl
      inc si
      mov byte ptr ds:[bx+si],00101000b
      inc si
      mov dl,' '
      mov ds:[bx+si],dl
      inc si
      mov byte ptr ds:[bx+si],00101000b
      inc si
      mov dl,'t'
      mov ds:[bx+si],dl
      inc si
      mov byte ptr ds:[bx+si],00101000b
      inc si
      mov dl,'o'
      mov ds:[bx+si],dl
      inc si
      mov byte ptr ds:[bx+si],00101000b
      inc si
      mov dl,' '
      mov ds:[bx+si],dl
      inc si
      mov byte ptr ds:[bx+si],00101000b
      inc si
      mov dl,'m'
      mov ds:[bx+si],dl
      inc si
      mov byte ptr ds:[bx+si],00101000b
      inc si
      mov dl,'a'
      mov ds:[bx+si],dl
      inc si
      mov byte ptr ds:[bx+si],00101000b
      inc si
      mov dl,'s'
      mov ds:[bx+si],dl
      inc si
      mov byte ptr ds:[bx+si],00101000b
      inc si
      mov dl,'m'
      mov ds:[bx+si],dl
      inc si
      mov byte ptr ds:[bx+si],00101000b
      inc si
      mov dl,'!'
      mov ds:[bx+si],dl
      inc si
      mov byte ptr ds:[bx+si],00101000b
      inc si
  mov ax,4c00h
  int 21h
  code ends
  end start

用了数据段以后可以,然后我用这个最笨的办法就出不来,是程序错误吗?求高手指教
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-3-20 10:55:00 | 显示全部楼层
assume cs:code
code segment
start:mov ax,0b800h
      mov ds,ax
      mov bx,0640h
      mov si,3fh

把3f改成40h,在这里奇数内存是填写颜色属性,你恰好反了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-3-20 16:37:25 | 显示全部楼层
本帖最后由 莫名其妙 于 2012-3-20 16:43 编辑

偶数位数据 奇数位颜色 这种方法算错一位就全乱了!~
不如直接给中间位置的偏移地址加到 段地址里
段地址=b8000h+行偏移640h+列偏移40h
然后取一个方便看和计算的比如B868:0这么算不容易错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-3-20 17:07:46 | 显示全部楼层
本帖最后由 坏喵呜 于 2012-3-20 17:08 编辑

;我的程序

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

stack segment
        db 16 dup(0)
stack ends

data segment
        db 'welcome to masm!'
        db 2h,24h,71h
data ends

code segment
                        ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
        start:        ;初始化
                        mov ax,stack
                        mov ss,ax
                        mov sp,16
                        mov ax,data                ;数据区短地址
                        mov ds,ax
                        mov ax,0B000h        ;显示缓冲区段地址
                        mov es,ax
                        mov bx,08000h        ;显示缓冲区偏移地址
                        mov di,16                ;将显示的样式放到要打印的字符窜之后,偏移地址是10h
                        ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                        ;loop s 3次,因为是打印3次不同样式的'welcome to masm!'
                        mov cx,3
                s:        push cx                                                ;保存cx
                        mov si,0                                                ;si用来定位data段的元素
                        mov dx,ds:[di]                                ;取出打印样式
                        push di                                                ;保存di
                        mov di,64                                        ;用来剧中打印字符串——32个空格,剧中(80-16)/2=32
                        mov cx,8                                        ;循环8次,8个字
                s0:        mov ax,ds:[si]                                ;取出要打印的字符串
                        mov byte ptr es:[bx+di],al                ;获取第一个字符
                        inc di                                                
                        mov byte ptr es:[bx+di],dl        ;给出打印样式
                        inc di
                        mov byte ptr es:[bx+di],ah
                        inc di
                        mov byte ptr es:[bx+di],dl
                        inc di                                                
                        add si,2                                                ;后两个字符的起始地址
                        loop s0
                        add bx,160                                        ;另起一行打印
                        pop di                                                 ;获取当前样式
                        inc di                                                 ;下一个样式的地址
                        pop cx                                                 ;取得cx
                        loop s                                                ;转移
                        mov ax,4c00h
                        int 21h
code ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-19 22:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表