0%

汇编的一些小实验

前言

  • 汇编本应该是一门很多人头疼的学科,但是我学的备感兴趣,这里是本学期的三个小实验,我真的非常非常感谢遇见了万小容老师,她讲课真的讲得特别好。汇编语言,一门无数个学长学姐都给我打预防针,头疼的科目,我学的津津有味。或许以后会忘记很多,但是为什么C语言是这样运作的,和操作系统的一些衔接,这对于我非常的有用。

不仅仅是~显示

题目

在屏幕中间分别显示绿色,绿底红色,白色蓝底的字符串‘welcome to masm!’

源代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
assume cs:code,ds:data

data segment
db 'Welcome to masm!'
db 02h,24h,71h
data ends

code segment
start: mov ax,data
mov ds,ax
mov bx,0
mov di,16
mov ax,0b800h
mov es,ax
mov ax,720h
mov si,ax

mov cx,3
s2: mov dx,cx

mov cx,16
s1: mov al,ds:[bx]
mov ah,ds:[di]
mov es:[si],ax
add si,2
add bx,1
loop s1

add di,1
add si,0a0h
sub si,20h
mov cx,dx
mov bx,0
loop s2

mov ax,4c00h
int 21h
code ends
end start

运行结果

1

不仅仅是~子程序调用

题目

将数据1234以十进制的形式在屏幕的12行40列,用白底蓝字显示出来。用子程序调用的方式。

源代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
assume cs:code

data segment
db 10 dup(0)
data ends

code segment
start: mov ax,1234
mov bx,data
mov ds,bx
mov si,0
call change
mov dh,12
mov dl,40
mov cl,71h
call show

mov ax,4c00h
int 21h

change: push ax
push bx
push cx
push di
push si

mov di,0
d20: mov cl,10
div cl
add ah,30h
mov bl,al
mov al,ah
mov ah,0
push ax
inc di
mov al,bl
mov ah,0
mov cx,ax
jcxz d1
mov ax,cx
jmp d20

d1: mov cx,di

d2: pop ax
mov [si],al
inc si
loop d2
pop si
pop di
pop cx
pop bx
pop ax
ret

show: push ax
push bx
push cx
push dx
push es
push si

mov ax,0b800h
mov es,ax
mov ch,0
mov al,160
mul dh
mov bx,ax
mov al,2
mul dl
add bx,ax
mov al,cl
mov cl,0

s1: mov ch,[si]
jcxz s2
mov es:[bx],ch
mov es:[bx+1],al
add si,1
add bx,2
jmp s1

s2: pop si
pop es
pop dx
pop cx
pop bx
pop ax
ret
code ends
end start

运行结果

2

不仅仅是~循环 调用 综合使用

题目

编程:以“年/月/日 时:分:秒”的格式,显示当前的日期、时间。

源代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
assume cs:code

data segment
db 10 dup(0)
data ends

code segment
start: mov ax,1234
mov bx,data
mov ds,bx
mov si,0
call change
mov dh,12
mov dl,40
mov cl,71h
call show

mov ax,4c00h
int 21h

change: push ax
push bx
push cx
push di
push si

mov di,0
d20: mov cl,10
div cl
add ah,30h
mov bl,al
mov al,ah
mov ah,0
push ax
inc di
mov al,bl
mov ah,0
mov cx,ax
jcxz d1
mov ax,cx
jmp d20

d1: mov cx,di

d2: pop ax
mov [si],al
inc si
loop d2
pop si
pop di
pop cx
pop bx
pop ax
ret

show: push ax
push bx
push cx
push dx
push es
push si

mov ax,0b800h
mov es,ax
mov ch,0
mov al,160
mul dh
mov bx,ax
mov al,2
mul dl
add bx,ax
mov al,cl
mov cl,0

s1: mov ch,[si]
jcxz s2
mov es:[bx],ch
mov es:[bx+1],al
add si,1
add bx,2
jmp s1

s2: pop si
pop es
pop dx
pop cx
pop bx
pop ax
ret
code ends
end start

运行结果

3