问题1:根据提供的N,计算N的3次方

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
assume cs:code

code segment
cube:
mov ax, bx
mul bx
mul bx
ret
start:
mov bx, 2 ; 寄存器传参
call cube ; 寄存器存结果在dx, ax中

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

问题2:计算data段中第一组数据的3次方,结果保存在后面一组dword单元中

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
assume cs:code, ds:data

data segment
dw 1,2,3,4,5,6,7,8 ; 8个字,16个字节
dd 0,0,0,0,0,0,0,0 ; 8个双字,32个字节
data ends
cube:
mov ax, bx
mul bx
mul bx
ret
start:
mov ax, data
mov ds, ax

mov si, 0 ; 存储偏移地址的变量
mov di, 16 ; 存储偏移地址的变量

mov cx, 8
s: mov bx, [si] ; 寄存器传参
call cube ; 寄存器存结果,在dx、ax中
mov [di], ax
mov [di].2, dx
add si, 2
add di, 4
loop s

mov ax, 4c00h
int 21h
code segment

问题3:将data段中的字符串转化为大写

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
assume cs:code, ds:data

data segment
db "conversation",0
data ends

code segment
start:
mov ax, data
mov ds, ax

mov si, 0 ; 寄存器传参
call capital ; 不需要结果 void

mov ax, 4c00h
int 21h
capital:
mov cl, [si]
mov ch, 0
jcxz ok
and byte ptr [si], 11011111b
inc si
jmp short capital
ok:ret
code ends
end start

问题4:计算(a - b)^3^,a、b为word型数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
assume cs:code

code segment
start:
mov ax, 1
push ax ; 栈传参
mov ax, 3
push ax ; 栈传参
call difcube ; 寄存器存结果,在dx、ax中

mov ax, 4c00h
int 21h
difcube:
push bp ; 保存现场
mov bp, sp
mov ax, [bp+4]
sub ax, [bp+6]
mov bp, ax
mul bp
mul bp
pop bp ; 还原现场
ret 4 ; 1.pop ip 2.add sp, 4