- [younggay] 20? 那个20? 01/21 15:05
- [martian] 博主辛苦了! 11/24 13:43
- [acool] 先存下 看看O(∩_∩)O哈哈~ 11/22 12:30
- [acool] 不错,踩踩;) 11/22 12:27
- [tomato] 收藏一下,好好看看,扫扫盲。 11/21 20:01
- [younggay] 程序正确固然重要,必要的地方写注释也是很必要的。要不看的人脑袋可就大了。呵呵 fighting ! 11/21 14:47
- [younggay] 就提一点要求: 哥儿们,加点注释把,(*^__^*)...嘻嘻 11/21 14:37
- [lwbfq] 有点糊涂。 11/21 14:26
- [lwbfq] 有点糊涂。 11/21 14:26
- [younggay] 嗯。不错,不过要是关键代码部分加上注释就更好了。而且加注释也是一个成熟的编程人员的良好习惯。 11/21 14:23
- [h.goood] 汇编作业在哪里做?我怎么没找到? 11/24 12:32
[2008-11-15 13:22] 实验十三,第一个实验的两种思路
assume cs:code
code segment
start:
mov ax,0
mov es,ax
mov ax,cs
mov ds,ax
mov di,200h
mov si,offset show_str
mov cx,offset showend-offset show_str
cld
rep movsb
mov word ptr es:[1F0H],200H
mov word ptr es:[1F2H],0H
mov ax,4c00h
int 21h
show_str:
push cx
push dx
push bx
push si
push di
push ax
mov ch,0
dec dh
dec dl
mov al,dh
mov bl,160
mul bl
mov bx,ax
mov al,dl
mov dl,2
mul dl
add ax,bx
mov bx,ax
mov di,0
mov si,0
ak:push cx
mov cl,[si]
jcxz fs
mov ax,0B800H
mov es,ax
mov al,[si]
mov es:[bx+di],al
pop cx
mov es:[bx+di+1],cl
inc si
add di,2
jmp short ak
fs:pop cx
pop ax
pop di
pop si
pop bx
pop dx
pop cx
iret
mov ax,4c00h
int 21H
showend:nop
code ends
end start
第一种思路,调用前几章实验中用到的show_str,稍做修改就可以了。
assume cs:code
code segment
start:
mov ax,0
mov es,ax
mov ax,cs
mov ds,ax
mov di,200h
mov si,offset show_str
mov cx,offset showend-offset show_str
cld
rep movsb
mov word ptr es:[1F0H],200H
mov word ptr es:[1F2H],0H
mov ax,4c00h
int 21h
show_str:
push cx
push dx
push bx
push si
push di
push ax
mov bl,cl 后来发现在int 10中可以用bl控制颜色,加这一句既可以实现颜色功能
ak:mov cl,[si]
jcxz fs
inc si
jmp short ak
fs:mov [si],24H
mov ah,2
mov bh,0
int 10H
mov dx,0
mov ah,9
int 21h
mov [si],0H
pop ax
pop di
pop si
pop bx
pop dx
pop cx
iret
mov ax,4c00h
int 21H
showend:nop
code ends
end start
第二种思路,既然中断可以用int21回到dos,可见在中断中可以调用中断。调用int 9设置光标和int 21H显示字符的功能,在显示前将0换成$,$的ascii码为24H,显示后再恢复即可。由于我不知道dos中断里显示字符颜色的中断,所以字符颜色只能是默认白色。附上测试程序和测试结果
测试程序
assume cs:code
data segment
db "welcome to masm!",0
data ends
code segment
start: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
code ends
end start
code segment
start:
mov ax,0
mov es,ax
mov ax,cs
mov ds,ax
mov di,200h
mov si,offset show_str
mov cx,offset showend-offset show_str
cld
rep movsb
mov word ptr es:[1F0H],200H
mov word ptr es:[1F2H],0H
mov ax,4c00h
int 21h
show_str:
push cx
push dx
push bx
push si
push di
push ax
mov ch,0
dec dh
dec dl
mov al,dh
mov bl,160
mul bl
mov bx,ax
mov al,dl
mov dl,2
mul dl
add ax,bx
mov bx,ax
mov di,0
mov si,0
ak:push cx
mov cl,[si]
jcxz fs
mov ax,0B800H
mov es,ax
mov al,[si]
mov es:[bx+di],al
pop cx
mov es:[bx+di+1],cl
inc si
add di,2
jmp short ak
fs:pop cx
pop ax
pop di
pop si
pop bx
pop dx
pop cx
iret
mov ax,4c00h
int 21H
showend:nop
code ends
end start
第一种思路,调用前几章实验中用到的show_str,稍做修改就可以了。
assume cs:code
code segment
start:
mov ax,0
mov es,ax
mov ax,cs
mov ds,ax
mov di,200h
mov si,offset show_str
mov cx,offset showend-offset show_str
cld
rep movsb
mov word ptr es:[1F0H],200H
mov word ptr es:[1F2H],0H
mov ax,4c00h
int 21h
show_str:
push cx
push dx
push bx
push si
push di
push ax
mov bl,cl 后来发现在int 10中可以用bl控制颜色,加这一句既可以实现颜色功能
ak:mov cl,[si]
jcxz fs
inc si
jmp short ak
fs:mov [si],24H
mov ah,2
mov bh,0
int 10H
mov dx,0
mov ah,9
int 21h
mov [si],0H
pop ax
pop di
pop si
pop bx
pop dx
pop cx
iret
mov ax,4c00h
int 21H
showend:nop
code ends
end start
第二种思路,既然中断可以用int21回到dos,可见在中断中可以调用中断。调用int 9设置光标和int 21H显示字符的功能,在显示前将0换成$,$的ascii码为24H,显示后再恢复即可。由于我不知道dos中断里显示字符颜色的中断,所以字符颜色只能是默认白色。附上测试程序和测试结果
测试程序
assume cs:code
data segment
db "welcome to masm!",0
data ends
code segment
start: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
code ends
end start
评论次数(1) |
浏览次数(924) |
类型(汇编作业) |
收藏此文 |