求实验13的答案,
{:7_166:}求实验13的答案本帖最后由 莫名其妙 于 2012-3-20 14:05 编辑
assume cs:code
data segment
db "welcome to masm!",0
data ends
code segment
start:
mov ax,cs
mov ds,ax
mov si,offset no7c ;设置si入口地址
mov ax,0
mov es,ax
mov di,200h
mov cx,offset no7cend-offset no7c
cld
rep movsb ;此9句为安装中断例程将offset no7c 处代码复制进0:200h处
;中断安装以上代码都一样这就是 格式
mov word ptr es:,200h
mov word ptr es:,0 ;此2句为设置中断向量
mov dh,10 ;行号
mov dl,10 ;列号
mov cl,2 ;颜色属性
mov ax,data
mov ds,ax
mov si,0
int 7ch ;调用中断例程
mov ax,4c00h
int 21h
no7c: push ax ;定义中断例程[开始]
push bx
push di
mov bx,0b800h
mov es,bx
mov al,160d ; 每行160
mul dh
mov di,ax ;将多少行 传递给di
mov al,2 ;此6句为确定符合题意的显存的偏移地址,
mul dl ;乘法以后ax为列数
; 不可用"mov di,160*dh+2*dl"试图达到此6句指令的功能。
add di,ax ;将行数与列数相加得出显示位置开始单元
mov bl,cl
again:mov cx,
jcxz no7cret ;判断是否结束为0 结束并跳转
mov es:,cl ; 因为mov cx, 所以cl 存放的是的值也就是每一位字母
mov es:,bl ; 这里bl是颜色
inc si
add di,2
jmp short again
no7cret: pop di
pop bx
pop ax
iret ; 将先前保存的int 7ch中断时push进来的各项出栈恢复cs:ip 继续执行下面代码
no7cend: nop ;定义中断例程[结束]
问题是什么?
你自己 思考过了么?写出程序代码 或者一部分代码了么 如果你百思不得其解那就往下看对照答案代码检查一下自己哪里不懂哪里不明白想不通
如果你完全没有想过没有思考过 那你看完下面的代码对你的启发也不是很大.
三思 !
后行! 本帖最后由 莫名其妙 于 2012-3-20 13:50 编辑
assume cs:code
code segment
start:
mov ax,cs
mov ds,ax
mov si,offset lp ;设置si入口
mov ax,0
mov es,ax
mov di,200h
mov cx,offset lpend-offset lp
cld
rep movsb
;以上9句为安装中断例程
mov word ptr es:,200h
mov word ptr es:,0
;以上2句为设置中断向量
; 以上这些完全没有变化
mov ax,0b800h
mov es,ax
mov di,160*12 ;取得显存第12行第0列的偏移地址
mov bx,offset s-offset se ;这里取得位移量
mov cx,80
s: mov byte ptr es:,'!'输入80次!
add di,2
int 7ch
se: nop
;以上4句则是对BX进行位移和方向的确定 int 7ch 是调用 进行对loop功能替换的语句
mov ax,4c00h
int 21h
lp: ;中断例程定义[开始]
push bp
mov bp,sp;将sp的值给BP这里bp 代替sp 进行操作为了结束操作以后sp的值不发生改变继续执行下一段代码
dec cx
jcxz lpret
add ,bx
;这里实现loop功能 {返回标号处 } = 向哪个方向 位移多少位 bx值为 -的向上位移bx值为 +的向下位移
;同时进行 CX=0判断如果不为零则继续运行loop功能 为0则跳转到结束loop
lpret: pop bp
iret ;中断的返回指令
lpend: nop ;中断例程定义[结束]
code ends
end start
本帖最后由 莫名其妙 于 2012-3-20 14:03 编辑
assume cs:code
code segment
s1: db 'Good,better,best,','$'
s2: db 'Never let it rest,','$'
s3: db 'Till good is better,','$'
s4: db 'And better,best.','$'
s: dw offset s1,offset s2,offset s3,offset s4
row: db 2,4,6,8
start:
mov ax,cs
mov ds,ax
mov bx,offset s ;确定各标号所在内存单元
mov si,offset row ;确定各行数内存单元
mov cx,4 ;4行
ok: mov bh,0
mov dh, ;为所填内容
mov dl,0
mov ah,2
int 10h ;调用 10h号中断将各寄存器的值与显示参数对应起来
; 以上是对行显示设置
mov dx, ;为所填内容
mov ah,9
int 21h
add bx,2
inc si ;此条指令为所填内容 指向下一个行
loop ok ;此条指令为所填内容 进行循环
;以上对某一行数据进行设置
mov ax,4c00h
int 21h
code ends
end start
莫名其妙 发表于 2012-3-20 13:24 static/image/common/back.gif
谢谢啊,学习了
页:
[1]