网站首页 > 技术文章 正文
mul指令
两个相乘的数都是8位:
一个默认放在AL中,另一个放在8位reg或内存字节单元中。结果默认存放于AX中。
例如:100*10
mov al,100
mov bl,10
mul bl
结果:(AX)=1000(03E8H)
两个相乘的数都是16位:
一个默认存放在A中,另一个存放在16位reg或内存字单元中。结果高位默认存放在DX中,低位存放在AX中。
例如:100*10000
mov ax,100
mov bx,10
mul bx
结果:(AX)=4240H,(DX)=000FH 1000000=F4240H
模块化程序设计
当程序越来越复杂,我们可以利用函数的特点,将一个大问题分解成若干个子问题,再分别解决每一个子问题。可以让程序模块化,逻辑更加清晰。
call不仅可以跳转执行其后面的子程序,也可以向子程序传递参数、获得子程序的返回值。
例如,计算N的3次方,参数为N。
assume cs:codesg
data segment
dw 1,2,3,4,5,6,7,8
dd 0,0,0,0,0,0,0,0
data ends
codesg segment
start:mov ax,data
mov ds,ax
mov si,0
mov di,16
mov cx,8
s:mov bx,[si]
call cube
mov [di],ax
mov [di].2,dx
add si,2
add di,4
loop s
mov ax,4c00H
int 21H
cube:mov ax,bx
mul bx
mul bx
ret
codesg ends
end start
数据段为1,2,3,4,5,6,7,8,通过循环分别计算cube(i),计算的结果每一次临时值高8位在DX中,第8位在AX中。
si是原始参数的偏移,di是将每一次临时值的结果存储起来,每一次偏移16位。
批量数据传递
求立方程序传递参数只有一个,使用一个si偏移寄存器。如果参数有2个、3个、多个,寄存器的数量一定会出现不够用情况。因此,可以将多个参数批量放到内存中,将内存空间首地址传递给子程序。
如下程序,将小写字母“blackcat”转化为大写:
assume cs:codesg
data segment
db 'blackcat'
data ends
codesg segment
start:mov ax,data
mov ds,ax
mov si,0
mov cx,8
call work
mov ax,4c00H
int 21H
work:and byte ptr [si],11011111b
inc si
loop work
ret
codesg ends
end start
字符串首地址为ds:[si],work子程序循环读取每一个参数,将cx寄存器赋值为字符串长度。
猜你喜欢
- 2025-07-27 据说这是1000年以后的课本(一千年后的教科书)
- 2025-07-27 穿得好,你也可以很丁真!黑黄皮男生夏日色彩搭配指南
- 2025-07-27 进口大众贰则 丨 Volkswagen Multivan T5与CrossGolf
- 2025-07-27 《病娇模拟器》制作人让玩家投票决定游戏的发展之路
- 2025-07-27 《呻吟》内容过于真实,请谨慎阅读(四)
- 2025-07-27 汇编指令学习(ADD,SUB,MUL,DIV,XADD,INC,DEC,NEG)
- 07-27据说这是1000年以后的课本(一千年后的教科书)
- 07-27穿得好,你也可以很丁真!黑黄皮男生夏日色彩搭配指南
- 07-27进口大众贰则 丨 Volkswagen Multivan T5与CrossGolf
- 07-27《病娇模拟器》制作人让玩家投票决定游戏的发展之路
- 07-27《呻吟》内容过于真实,请谨慎阅读(四)
- 07-27汇编指令学习(ADD,SUB,MUL,DIV,XADD,INC,DEC,NEG)
- 07-27汇编语言mul乘法指令和模块化程序设计
- 07-27pycharm下module 'requests' has no attribute 'get'问题的解决
- 最近发表
-
- 据说这是1000年以后的课本(一千年后的教科书)
- 穿得好,你也可以很丁真!黑黄皮男生夏日色彩搭配指南
- 进口大众贰则 丨 Volkswagen Multivan T5与CrossGolf
- 《病娇模拟器》制作人让玩家投票决定游戏的发展之路
- 《呻吟》内容过于真实,请谨慎阅读(四)
- 汇编指令学习(ADD,SUB,MUL,DIV,XADD,INC,DEC,NEG)
- 汇编语言mul乘法指令和模块化程序设计
- pycharm下module 'requests' has no attribute 'get'问题的解决
- python委托定制超类getattr和getattribute管理属性
- 「按键精灵安卓版」界面多选框实现10选3(选中不超过3个)
- 标签列表
-
- axure 注册码 (25)
- exploit db (21)
- mutex_lock (30)
- oracleclient (27)
- nfs (25)
- springbatch (28)
- oracle数据库备份 (25)
- dir (26)
- connectionstring属性尚未初始化 (23)
- output (32)
- panel滚动条 (28)
- centos 5 4 (23)
- sql学习 (33)
- c 数组 (33)
- pascal语言教程 (23)
- ppt 教程 (35)
- java7 (24)
- 自适应网站制作 (32)
- server服务自动停止 (25)
- 超链接去掉下划线 (34)
- 什么是堆栈 (22)
- map entry (25)
- ubuntu装qq (25)
- outputstreamwriter (26)
- fill_parent (22)