实验9
assume cs:code,ds:data,ss:stackdata segment
db 'welcome to masm!'
db 21h,26h,74h
data ends
stack segment
dw 8 dup(0)
stack ends
code segment
start:mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
xor bx,bx ;bx清0,用来索引颜色
mov ax,0b872h ;屏幕中间现存的段地址,
mov cx,3 ;外循环3次
s3: push cx ;三个入栈保存外循环相关寄存器的值
push ax ;以防止在内循环中他们的值被改变
;push bx
mov es,ax
mov si,0 ;索引源数据,字符welcome to masm
mov di,0 ;定位目标地址
mov cx,16 ;内循环16次
s1: mov al,ds:
mov ah,ds:10h
mov es:,ax
inc si
add di,2
loop s1
incbx
pop ax
add ax,0ah
pop cx
loop s3
mov ax,4c00h
int 21h
code ends
end start
把小甲鱼的程序优化了一下,分享分享 ;=============================================================
; 实验九: 在屏幕中间显示3行不同前景,背景色的字符
;=============================================================
assume cs:codesg, ds:datasg, ss:stacksg
datasg segment
db 'welcome to masm!' ;显示的字符
db 00000010b, 00100100b, 01110001b;颜色属性
datasg ends
stacksg segment
db 8 dup(0)
stacksg ends
codesg segment
start:
mov ax, stacksg
mov ss, ax
mov sp, 8
mov ax, datasg
mov ds, ax
mov ax, 0B872H ;显示中间行中间列偏移地址
mov es, ax
mov di, 0 ;行偏移,每行 +160
mov si, 0 ;颜色属性字节偏移 ds:16
mov cx, 3
S: ;外循环,3次,一次为一行 di
mov bx, 0 ;字符字节偏移
push cx
mov cx, 16
s0: ;内循环,一次1字节字符(写入显示地址为2字节) bx
mov al,
push bx ;保存 bx,下面可用2*(bx) 来完成显示地址偏移
add bx, bx
mov es:, al
mov al, 16
mov es:1, al
pop bx
inc bx
loop s0
add di, 160
inc si
pop cx
loop S
mov ax, 4c00H
int 21H
codesg ends
end start同分享,俺独立写的代码,才发现与小甲鱼的,还有网上参考答案出入比较大...但试验了一下,还是可以的...求优化...
页:
[1]