|
发表于 2013-2-28 18:34:39
|
显示全部楼层
再给你2个我做实验九的程序答案,一共花了 5天,做完以后,很有成就
第一个:
assume cs:code,ds:data ;2013年2月8日 21:30:37
;目的:实验9,一列一列的赋值
data segment
db'welcome to masm!'
data ends
code segment
start:
mov ax,data
mov es,ax
mov ax,0b800h
mov ds,ax
mov bx,720h
mov si,0
mov di,0
mov cx,16
s0:mov ax,es:[si]
mov [bx].0h[di],ax ;赋值到第12行
mov [bx].0a0h[di],ax ;赋值到第13行
mov [bx].140h[di],ax ;赋值到第14行
mov ax,2h
mov [bx].1h[di],ax ;12行颜色为绿色
mov ax,24h
mov [bx].0a1h[di],ax ;13行颜色为绿底红色
mov ax,71h
mov [bx].141h[di],ax ;14行颜色为白底蓝色
inc si
add di,2
loop s0
mov ax,4c00h
int 21h
code ends
end start
;总结:80*25,本程序中间位置(第一页)为 第12,13,14行,第64列到95列
; 行内存分别为:6e0h,780h,820h,列内存为40h-5fh,
; 这样就可以的出第一个内存单元地址:720h
第二个:
assume cs:code,ds:data,ss:stack ;2013年2月9日 21:40:26
;目的:实验9,使用外循环和内循环,压栈cx的方法
; 一行一行地赋值
data segment
db 'welcome to masm!'
db 02h,024h,071h
data ends
stack segment
db 15 dup (0)
stack ends
code segment
start:
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,16
mov ax,0872h ;算出屏幕第12行中间的显存的段起始位置放入ax中
mov si,0
mov di,0
mov bx,0
mov cx,0
s0: push cx
push ax
push bx
mov es,ax
s1: mov al,[bx+si] ;此循环实现偶地址中存放字符
mov es:[di],al
inc si
add di,2
loop s1
mov si,0
mov di,0
s2: mov al,16[bx+si] ;此循环实现奇地址中存放字符的颜色属性
mov es:1[di],al
inc si
add di,2
loop s2
pop cx
pop ax
add ax,0a0h ;相加后,ax变为下一行的地址
loop s0
mov ax,4c00h
int 21h
code ends
end start
|
|