170413 汇编-防溢出除法和数值转字符型的子程序
2017-04-13 23:22
357 查看
1625-5 王子昂 总结《2017年4月13日》 【连续第194天总结】
A.
汇编语言实验十 90%
B.
第二个子程序:解决除法溢出的问题
word型/byte型时以8位寄存器保存余数和商,但有可能商大于8位,此时会报错Divide overflow;解决程序:
被除数为dword型,除数为word型,结果为dword型
参数:
ax=低16位
dx=高16位
cx=除数
返回:
dx=结果的高16位
ax=结果的低16位
cx=余数
代码:
divdw:
mov bx,ax ;bx中存L
mov ax,dx
;dx置0,ax中存H
mov ax,0
div
cx ;H/N,商在ax,余在dx
mov bp,ax
int(H/N)暂存
mov ax,bx
div cx
mov dx,bp
ret
原理:公式X/N=int(H/N)*65536+[rem(H/N)*65536+L]/N
其中:X为被除数,N为除数,H为X的高16位,L为X的低16位,int()表示取商,rem()表示取余
注意点:
通用寄存器有ax,bx,cx,dx,bp,sp,si,di八个,它们虽然名义上有自己的用途,但实际上是可以作为数据暂存通用的。当需要中介转移数据时可以任意使用这8个寄存器
第三个子程序:数值显示
程序中,数值类型和字符串类型是两种,例如'0'的ASCII码值是30H。因此若需要在显存中表示它们,则需要转换成字符类型。
参数:
ax=word型数据
ds:si指向字符串的首地址
代码:
dtoc:
mov bp,4 ;8位寄存器所能存储的数据最大长度5
dtocl:
mov bh,10 ;除以10得到余数
div bh
mov [si+bp],ah
;将余数送往指定段
add
[si+bp],30H ;加上30H,使其的值表示的字符与原值相同
mov ah,0
;ah置0,等待下次进行除法
mov cl,al
;判断商是否为0
jcxz
ok
sub bp,1
;非0则将指针-1,继续循环
loop dtocl
ok:
ret
注意点:
由于取余的方法得到的数字顺序与原数字是相反的,所以我用指针-1的方法来放置;但是这样其实还是有弊端,当非5位数时会造成左边有空余
顺序倒置只能通过栈或内存区域进行一次转换,但是参数中又没有给定栈数据段来操作,因此不知道该如何倒置
C.
明日计划
汇编语言
明天将3个子程序综合起来做一次程序设计,利用显存来显示内容
PYQT
地图控件
A.
汇编语言实验十 90%
B.
第二个子程序:解决除法溢出的问题
word型/byte型时以8位寄存器保存余数和商,但有可能商大于8位,此时会报错Divide overflow;解决程序:
被除数为dword型,除数为word型,结果为dword型
参数:
ax=低16位
dx=高16位
cx=除数
返回:
dx=结果的高16位
ax=结果的低16位
cx=余数
代码:
divdw:
mov bx,ax ;bx中存L
mov ax,dx
;dx置0,ax中存H
mov ax,0
div
cx ;H/N,商在ax,余在dx
mov bp,ax
int(H/N)暂存
mov ax,bx
div cx
mov dx,bp
ret
原理:公式X/N=int(H/N)*65536+[rem(H/N)*65536+L]/N
其中:X为被除数,N为除数,H为X的高16位,L为X的低16位,int()表示取商,rem()表示取余
注意点:
通用寄存器有ax,bx,cx,dx,bp,sp,si,di八个,它们虽然名义上有自己的用途,但实际上是可以作为数据暂存通用的。当需要中介转移数据时可以任意使用这8个寄存器
第三个子程序:数值显示
程序中,数值类型和字符串类型是两种,例如'0'的ASCII码值是30H。因此若需要在显存中表示它们,则需要转换成字符类型。
参数:
ax=word型数据
ds:si指向字符串的首地址
代码:
dtoc:
mov bp,4 ;8位寄存器所能存储的数据最大长度5
dtocl:
mov bh,10 ;除以10得到余数
div bh
mov [si+bp],ah
;将余数送往指定段
add
[si+bp],30H ;加上30H,使其的值表示的字符与原值相同
mov ah,0
;ah置0,等待下次进行除法
mov cl,al
;判断商是否为0
jcxz
ok
sub bp,1
;非0则将指针-1,继续循环
loop dtocl
ok:
ret
注意点:
由于取余的方法得到的数字顺序与原数字是相反的,所以我用指针-1的方法来放置;但是这样其实还是有弊端,当非5位数时会造成左边有空余
顺序倒置只能通过栈或内存区域进行一次转换,但是参数中又没有给定栈数据段来操作,因此不知道该如何倒置
C.
明日计划
汇编语言
明天将3个子程序综合起来做一次程序设计,利用显存来显示内容
PYQT
地图控件
相关文章推荐
- 170417 汇编-除法防溢出和数值显示的子程序实操
- [Hb-IX] 编写子程序(显示字符串、数值,除法溢出问题)
- 汇编语言 第三版 王爽 实验10-2 编写子程序 之 解决除法溢出问题 divdw
- 编写无溢出除法的汇编子程序
- 2.解决除法溢出问题-汇编语言(王爽)-实验10 编写子程序
- 一文读懂除法溢出-使用汇编重定向0号中端(除法错误中断,比如,执行div指令产生的除法溢出)
- 汇编语言解决除法溢出问题的小程序
- 汇编语言的16位除法子程序
- 使用汇编语言解决除法溢出问题
- 汇编语言数值显示 的子程序dtoc.asm
- 汇编语言:实验10 根据材料编程—2.解决除法溢出的问题
- 汇编中的除法溢出的解决
- 子程序解决除法溢出问题 基于8086汇编
- 【汇编】重写0号中断(除法溢出中断)
- 8086汇编不溢出除法
- 汇编语言下--如何防止除法溢出
- 编写不会产生除法溢出的子程序
- 汇编中防止除法溢出
- 汇编实验10-2 解决除法溢出的问题
- 汇编语言 之 除法溢出问题