实验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: mov ax,0b800h
mov es,ax ;显存的段地址
mov al,160
mul dh
mov bx,ax ;行偏移
mov al,2
dec dl
mul dl ;列偏移
add ax,bx
mov di,ax ;总偏移
work: mov cl,[si]
mov ch,0
jcxz show_back
mov es:[di],cx
mov cl,2
mov es:[di+1],cl
add di,2
inc si
jmp short work
show_back: ret
code ends
end start
实验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,0fh
mov cx,0ah
call divdw
mov ax,4c00h
int 21h
divdw: push ax
mov ax,dx
mov dx,0
div cx ;高位求商保存在ax中,余数保存在dx中
mov bx,ax
pop ax
div cx
mov cx,dx ;余数保存在cx中
mov dx,bx ;高16位保存在dx中
ret
code ends
end start
实验10.3
assume cs:code
data segment
db 10 dup (0)
data ends
code segment
start:mov ax,12666
mov bx,data
mov ds,bx
mov si,0
push ds
push si
call dtoc
pop si
pop ds
mov dh,8
mov dl,3
mov cl,2
call show_str
mov ax,4c00h
int 21h
dtoc: mov cx,0
push cx
mov bx,0ah
divb: mov dx,0
div bx ;求余
add dx,30h
push dx;把dx入栈
mov cx,ax
jcxz shang
jmp short divb
shang: pop cx
mov ds:[si],cl ;逆序存放
jcxz back
inc si
jmp short shang
back: ret
show_str: mov ax,0b800h
mov es,ax ;显存的段地址
mov al,160
mul dh
mov bx,ax ;行偏移
mov al,2
dec dl
mul dl ;列偏移
add ax,bx
mov di,ax ;总偏移
work: mov cl,[si]
mov ch,0
jcxz show_back
mov es:[di],cx
mov cl,2
mov es:[di+1],cl
add di,2
inc si
jmp short work
show_back: ret
code ends
end start
----------------------------------------
好累啊。。总算完成这三个实验了
- [ce54605802] 第一题,注意寄存器的冲突问题 09/15 23:13
- [younggay] 回答正确。 08/18 09:07
- [游客] 那现在这个地方显示的数据是什么数据呢? 07/01 19:55
- [mess] 第一题没问题,只要保证从数据段第1和2个字节是0就可以了。 其他的也没问题,博主继续加油啊~_ 07/01 10:31
- [mess] 答案没问题、 07/01 10:28
- [crazyman] mov es:720h[si],ax ;这步执行完后,我查看es:0720,为什么查看到的不是ax的 07/01 09:26
- [jmuguy] 谢谢你的指导。。。 06/29 13:18
- [younggay] 改过来了,可是结果为什么还是无法显示收入、雇员数。。 ============ 收入和雇员数是不 06/29 13:14
- [jmuguy] 改过来了,可是结果为什么还是无法显示收入、雇员数。。 06/29 12:55
- [游客] 博主的雇员数有问题,再调试调试吧 06/29 10:29