- 实验10.1
assume cs:code
data segment
db 'welcome to masm!',0
data ends
code segment
start: mov dh,8
mov dl,3
mov cl,2
mov ax,data
mov ds,ax
mov si,0
call show_str
mov ax,4c00h
int 21h
show_str:
push dx
push cx
push si
mov di,4
mov bl,dh
//dec bl 讲道理我觉得应该有这一步的,因为第一行地址是从0开始的,但是加上这一步显示却是在第七行
mov al,160
mul bl
mov bx,ax
mov ax,0b800h
mov es,ax
mov al,cl
s: mov ch,0
mov cl,ds:[si]
jcxz ok
mov es:[bx+di],cl
mov es:[bx+di+1],al
add di,2
inc si
loop s
ok: pop dx
pop cx
pop si
ret
code ends
end start
2 实验10.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,16
mov ax,4240h
mov dx,00fh
mov cx,0ah
call divdw
mov ax,4c00h
int 21h
divdw:
push ax
mov ax,dx
mov dx,0
div cx ;计算H/L,ax中的值为最终结果的高16位(看公式可知)ax放商,bx放余数
mov si,ax ;最高位的商放入si
pop ax
div cx ;因为dx保存着H/L的余数,可以做公式后面运算的高16位,取出X的低16位
mov cx,dx ;公式后面运算结果的余数给cx
mov dx,si ;公式前面的运算结果之前保存给si了
ret
code ends
end start