第十章
来源:互联网 发布:炒黄金手机软件 知乎 编辑:程序博客网 时间:2024/04/27 14:19
检测点10.1
第一空:1000
第二空:0000
检测点10.2
ax=6
注意: 执行call s是ip的值为6 接着进栈,然后执行pop ax 相当于把ip的值放到ax中!!
检测点10.3
ax=1100H
注意:执行callfar ptr s后 cs=1000 ip=3(10H)接着进栈 然后执行pop ax 此时ax=3
==〉add ax,ax此时ax=6(100H)==〉pop bx 此时bx=1000 ==〉add ax,bx此时ax=1100H
检测点10.4
ax=000B 具体我就不一一分析了,呵呵!!
检测点10.5
(1)
ax=3
(1)ax=1 bx=0
实验十:编写子程序
(1)显示字符串
;*******************************************************************
;显示字符串的子程序 (dh)= 行号(取值范围0-24),(dl)=列号(取值范围0-79)
;(cl)=颜色,ds:si指向字符串的首地址
;********************************************************************
assume cs:code,ds:data,es:display,ss:stack
data segment
db 'welcome to masm!',0
data ends
stack segment
db 8 dup(0)
stack ends
display segment
db 1024 dup(0)
display 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 cx
push si
mov ax,0B800H
mov es,ax
mov al,0a0h
dec dh
mul dh
mov bx,ax
mov al,2
mul dl
sub dl,2
add bx,ax ;得到偏移地址=(dh-1)*160+dl*2-2
mov di,0
mov ch,0
mov al,cl
s:
mov cl,ds:[si]
jcxz next ;进行判断最后一个字符是否是零,如果是零则结束
mov es:[bx+di],cl ;将字符串放到偶地址中
mov es:[bx+di+1],al ;颜色属性放到奇地址中
add di,2
inc si
jmp s
next:
pop si
pop cx
ret
code ends
end start
注意:子程序中用到的寄存器一定要将其保存起来,注意参数的传递!!!,只要程序中要进栈和出栈,就一定要定义堆栈段!!!!
2.解决除法溢出问题
;*****************************************************************
;解决除法溢出问题,
;参数:(ax)=dword型数据的低16位,(dx)=dword型数据的高16位,(cx)=除数
;返回:(dx)=结果的高16位,(ax)=结果的低16位,(cx)=余数
;*****************************************************************
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 ;dx:ax/cx=高位的商*65536+[高位的余数*65536+低位]/cx
ret ;子程序定义结束
code ends
end start
3.数值显示子程序
;**********************************************
;数值显示子程序
;编程,将data段中的数据以十进制的形式显示出来
;**********************************************
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,2
call show_str
mov ax,4c00h
int 21h
;******************************************************
;将word型的数据转变为十进制数字符串的子程序
;****************************************************
dtoc:
push ax
push si
push dx
push cx
push bx
mov bx,0
s0:
mov cx,10d
mov dx,0
div cx
mov cx,ax ;将商放到cx中判断商是否为零
jcxz s1
add dx,30h
push dx
inc bx
jmp s0
s1:
add dx,30h
push dx
inc bx
mov cx,bx
mov si,0
s2:
pop ax
mov ds:[si],al
inc si
loop s2
pop bx
pop cx
pop dx
pop si
pop ax
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 ;得到偏移地址=(dh-1)*160+(dl-2)*2
mov ax,0B800H
mov es,ax
mov di,0
mov ch,0
mov al,cl
s:
mov cl,ds:[si]
jcxz next ;进行判断最后一个字符是否是零,如果是零则结束
mov es:[bx+di],cl ;将字符串放到偶地址中
mov es:[bx+di+1],al ;颜色属性放到奇地址中
add di,2
inc si
jmp short s
next:
pop si
pop cx
pop bx
ret
code ends
end start
- 第十章
- 第十章
- 第十章
- 第十章
- 第十章
- 第十章
- 第十章
- kodojdo指南第十章
- 第十章:文件
- 第十章: Detecting Types
- 第十章 重来
- 第十章 光电传感器
- 算法导论: 第十章
- 第十章:CDC API
- 第十章 动词概说
- RMI规范--第十章
- 第十章 操作系统引论
- 冷夫记第十章
- 第四十三批博士后科学基金资助金获得者名单
- Latex Common Errors
- 实验六
- 实验七 :寻址方式在结构化数据访问中的应用
- 第九章
- 第十章
- 课程设计一
- 第十一章
- 高中落榜了,我不知道怎么办!选的学校也读了一年了...
- 作为一名忠实的石器时代的骨灰级玩家
- 一点一滴的爱情纪录
- 贝勃定律
- nginx代码分析之 转载
- [转]NginxChsHttpSsiModule - Nginx 中文站