实验10
这次实验勉强可以看懂别人的,自己写不出来,习惯了c的思维,有时间做个汇编的个人笔记总结.
1.显示子程序
assume cs:code,ds:data
data segment
db 'Welcome to masm!',0
data ends
code segment
start:
mov dh,1 ;dh装行号(范围:1--25)
mov dl,1 ;dl装列号(范围:1--80)[注:每超过80等于行号自动加1]
mov cl,0cah ;cl中存放颜色属性(0cah为红底高亮闪烁绿色属性)
mov ax,data
mov ds,ax
mov si,0
call show_str
mov ax,4c00h
int 21h
show_str: ;显示字符串的子程序[定义开始]
push cx
push si
mov al,0A0h
dec dh ;行号在显存中下标从0开始,所以减1
mul dh
mov bx,ax
mov al,2
mul dl
sub ax,2 ;列号在显存中下标从0开始,又因为偶字节存放字符,所以减2
add bx,ax ;此时bx中存放的是行与列号的偏移地址
mov ax,0B800h
mov es,ax ;es中存放的是显存的第0页(共0--7页)的起始的段地址
mov di,0
mov al,cl
mov ch,0
s: mov cl,ds:[si]
jcxz ok
mov es:[bx+di],cl ;偶地址存放字符
mov es:[bx+di+1],al ;奇地址存放字符的颜色属性
inc si
add di,2
jmp short s
ok: pop si
pop cx
ret ;显示字符串的子程序[定义结束]
code ends
end start
2.解决除法溢出的问题
assume cs:code,ss:stack
stack segment
dw 8 dup(0)
stack ends
code segment
start:
mov ax,stack
mov ss,ax
mov sp,10h
mov ax,4240h
mov dx,0fh
mov cx,0ah
call divdw
mov ax,4c00h
int 21h
divdw: ;子程序定义开始
push ax
mov ax,dx
mov dx,0
div cx
mov bx,ax
pop ax
div cx
mov cx,dx
mov dx,bx
ret ;子程序定义结束
code ends
end start
3.数值显示
完整程序如下:
assume cs:code,ds:data
data segment
db 10 dup (0)
data ends
code segment
start:
mov ax,12666
mov bx,data
mov ds,bx
mov si,0
call dtoc
mov dh,8
mov dl,3
mov cl,0cah
call show_str
mov ax,4c00h
int 21h
dtoc: ;数值显示的子程序定义
push dx
push cx
push ax
push si
push bx
mov bx,0
s1: mov cx,10d
mov dx,0
div cx
mov cx,ax
jcxz s2
add dx,30h
push dx
inc bx
jmp short s1
s2: add dx,30h
push dx
inc bx ;再进行一次栈操作(补充当"商为零而余数不为零"时的情况)
mov cx,bx
mov si,0
s3: pop ax
mov [si],al
inc si
loop s3
okay: pop bx
pop si
pop ax
pop cx
pop dx
ret ;数值显示的子程序定义结束
show_str:
push bx
push cx
push si
mov al,0A0h
dec dh
mul dh
mov bx,ax
mov al,2
mul dl
sub ax,2
add bx,ax
mov ax,0B800h
mov es,ax
mov di,0
mov al,cl
mov ch,0
s: mov cl,ds:[si]
jcxz ok
mov es:[bx+di],cl
mov es:[bx+di+1],al
inc si
add di,2
jmp short s
ok: pop si
pop cx
pop bx
ret
code ends
end start
- [游客] es 11/12 11:43
- [younggay] 第二题好像不对。 06/18 14:17
- [游客] 正确 06/14 10:40
- [tomato] 建议博主将汇编作业的答案类型改为汇编作业,这样更容易使自己的作业得到检查! 06/12 20:31
- [mess] 汇编和c语言有很多想象的地方,都是面向过程的语言,汇编的子程序也c的函数也是一样的,博主多对比,多思 06/06 12:15
- [mouse] 后面两个检测点答案都对,其他的自己debug看一下就知道了,计算机可以我们的良师益友啊 ;) 06/06 11:29
- [mouse] 这章的实验不难,比课设一简单多了o(∩_∩)o...可以自己写个小程序测试一下,连效果一块发上来;) 06/06 11:21
- [xiaochong] 博主第二 题答案,, 1 第一条指令:mov cl,[bx] 第二条指令:mov 05/31 17:39
- [xiaochong] 不知道具体如何写汇编程序,有思路没步骤, ----------------- 建议博主,扎扎实实 05/31 17:23
- [crazyman] 结果只是验证我们能否完成,而我们应该更好的完成。 博主既然贴出了两个类型的代码,不妨比较一下两种方 05/26 11:04