253009514 发表于 2012-6-30 11:05:34

汇编实验9 求大虾指教

assume cs:code ,ds:data,ss:stack
data segment
;年份(0-53H);(存放在段ds段)
db 'welcome to masm!'
db 02h,24h,71h
data ends
stack segment;(存放在es段)(02H=1,24H=2,71H=3)
dw 8 dup (0)
stack ends
code segment
start:
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,16
mov ax,0b7c0H
mov es,ax;初始地址
mov bx,0;定义颜色
mov si,0;定义初始地址索?
mov di,0;目标地址索引
mov cx,3
s:
push cx
push bx
push ax
mov cx,16
s1:
pop bx
mov al,ds:
mov es:,al
mov ah,ds:
mov es:,ah
inc si
add di,2
loop s1


mov ax,4c00h
    int 21h
code ends
end start
这段代码 还没完成
但是在测试的时候 我发现
mov ah,ds:
mov es:,ah
这段代码为什么 没有循环16次
好像就循环了一次 而且还不是在w的后面
却跑到e 的后面了。而且 我那个位置不是显存的位置吗 为什么我的dos 下没显示welcome to masn呢

253009514 发表于 2012-6-30 13:18:40

大虾在哪。。求指教 不明白 我的思路是把颜色02赋值给ah把字符赋值给地位al 执行16次循环 我个人觉得没问题啊为什么只循环了16次al没有执行16次ah呢

253009514 发表于 2012-6-30 19:02:23

{:5_104:}自己终于找到原因了 {:5_99:}

yuprxk 发表于 2012-7-1 19:14:50

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 bx, 0
                mov si, bx
                mov di, bx
                mov bp, 1760                                ;0b800:1760 第12行的偏移量
                mov cx, 16
        sa:        mov al, ds:                                ;复制3行welcome to masm!到屏幕中央
                mov es:.66, al                        ;66为welcome开始的33列的地址(33*2)
                mov es:.66, al
                mov es:.66, al
                inc bx
                add di, 2
                loop sa
               
                mov di, 0
                mov cx, 16
        sc:        mov byte ptr es:.66, 2h                        ;填充颜色
                mov byte ptr es:.66, 24h
                mov byte ptr es:.66, 71h
                add di, 2
                loop sc
               
                mov ax, 4c00h
                int 21h
codesg ends
end        start
页: [1]
查看完整版本: 汇编实验9 求大虾指教