例:将字变量nm中的数按16位二进制数位分离开,逐位转换 为ASCI码,并从最高有效位开始依次逐位存入以 binbuf为起 始地址的16个字节单元中。 设:(num)=4230H 要求将4230H=0100001000110000B逐位分离开 并转换为: 30313030303031303030313130303030 先将(mm)>(DX),再讨论如何分离开各二进制位并转 换为ASCI码,分析如下 根据上述分析,将(DX)中的二进制数依次循环左移1位 可以使得各个数位的分离(AND)和ASCⅡl码转换(ADD)操 作完全相同,便于组织循环,并且循环次数已知(16次)。 此例为计数循环 例:将十进制数( number)转换为八进制数 方法:( number)8保留余数,除法操作循环次数事先未知, 仅当商为0时,循环结束。此例为条件循环 next
例:将字变量num中的数按16位二进制数位分离开,逐位转换 为ASCII码,并从最高有效位开始依次逐位存入以binbuf为起 始地址的16个字节单元中。 设:(num)= 4230H 要求将 4230H= 0 1 0 0 0 0 1 0 0 0 1 1 0 0 0 0 B 逐位分离开 并转换为: 30 31 30 30 30 30 31 30 30 30 31 31 30 30 30 30 先将(num)->(DX),再讨论如何分离开各二进制位并转 换为ASCII码,分析如下: 根据上述分析,将(DX)中的二进制数依次循环左移1位, 可以使得各个数位的分离(AND)和ASCII码转换(ADD)操 作完全相同,便于组织循环,并且循环次数已知(16次)。 例: 将十进制数(number)转换为八进制数 方法:(number)/8 保留余数,除法操作循环次数事先未知, 仅当商为0时,循环结束。此例为条件循环 此例为计数循环 next
(DX)=0100001000110000 1.1000010001100000( ROL DX, ∧00000001(AND?,1) 00000000 +00110000(ADD?,30H) 00110000 2.0000100011000001( ROL DX,1) ∧00000001(AND) 0000000 +00110000(ADD) 00110001 16.0100001000110000( ROL DX,1) ∧00000001(AND) 00000000 +00 0000(ADD) 00110000 bib130313030303031303030313130303030返回
(DX)= 0 1 0 0 0 0 1 0 0 0 1 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 1 0 0 0 0 0 (ROL DX,1 ) 0 0 0 0 0 0 0 1 (AND ?,1) 0 0 0 0 0 0 0 0 + 0 0 1 1 0 0 0 0 (ADD ?,30H) 0 0 1 1 0 0 0 0 30 0 0 0 0 1 0 0 0 1 1 0 0 0 0 0 1 (ROL DX,1) 0 0 0 0 0 0 0 1 (AND) 0 0 0 0 0 0 0 1 + 0 0 1 1 0 0 0 0 (ADD) 0 0 1 1 0 0 0 1 31 0 1 0 0 0 0 1 0 0 0 1 1 0 0 0 0 (ROL DX,1) 0 0 0 0 0 0 0 1 (AND) 0 0 0 0 0 0 0 0 + 0 0 1 1 0 0 0 0 (ADD) 0 0 1 1 0 0 0 0 … … 30 31 30 30 30 30 31 30 30 30 31 31 30 30 30 1. 2. 16. binbuf 30 返回
当型循环与直到型循环 例统计AX中的二进制数含“1”的总个数,程序段如下 MOV CX. O AGaIn: AND AX. AX (AX) JZ QUIT ;是,退出循环 SAL AX. 1 ;否,(AX)的最高位移入CF位 JNC NEXT ;CF红1时,转向NEXT再次循环 INC CX ;CF=1,计数器(CX)←(CX)+1 NEXT: JMP AGAIN ;再次循环 QUIT 上述程序为当型循环程序结构:先判断条件,后执行循环。 课堂练习 采用循环结构完成自然数1到100的求和运算。next
例 统计AX中的二进制数含“1”的总个数,程序段如下: MOV CX,0 AGAIN: AND AX,AX ;(AX)=0? JZ QUIT ;是,退出循环 SAL AX,1 ;否,(AX)的最高位移入CF位 JNC NEXT ;CF≠1时,转向NEXT再次循环 INC CX ;CF=1,计数器(CX)←(CX) +1 NEXT: JMP AGAIN ;再次循环 QUIT : 上述程序为当型循环程序结构:先判断条件,后执行循环。 课堂练习: 采用循环结构完成自然数1到100的求和运算。next 当型循环与直到型循环:
存储模型与简化段定义伪指令 较新版本的汇编程序(MASM5.0与MASM60)除支持完整段定义伪指令外, 还提供了一种新的简单易用的存储模型和简化的段定义伪指令 1.存储模型伪指令 存储模型的作用是什么呢?存储模型决定一个程序的规模, 也确定进行子程序调用、指令转移和数据访问的缺省属性 (NEAR或FAR)。当使用简化段定义的源程序格式时,在 段定义语句之前必须有存储模型 MODEL语句,说明在存储 器中应如何安放各个段。 MODEL伪指令的常用格式如下: MODEL存储模型
存储模型与简化段定义伪指令 较新版本的汇编程序(MASM5.0与MASM6.0)除支持完整段定义伪指令外, 还提供了一种新的简单易用的存储模型和简化的段定义伪指令。 1. 存储模型伪指令 存储模型的作用是什么呢?存储模型决定一个程序的规模, 也确定进行子程序调用、指令转移和数据访问的缺省属性 (NEAR或FAR)。当使用简化段定义的源程序格式时,在 段定义语句之前必须有存储模型.MODEL语句,说明在存储 器中应如何安放各个段。 MODEL伪指令的常用格式如下: .MODEL 存储模型
存储模型 功能 适用操 作系统 Tiny(微型) 所有数据和代码都放在一个段内,其访问都为 NEAR型,整个程序<64K,并会产生COM文件。 MS-DOS 所有代码在一个64KB的段内,所有数据在另一个|MS-DOS Smal(小型)64KB的段内(包括数据段堆栈段和附加段)。 Windows 所有代码>64K时可放在多个代码段中,转移或调 瓶05汇编春苯编森到月有根翻价殺特点选静 型 般可以光MALL模型另外,TNY模型将产生oM述 庑血基他模型产有代形隰背。内模型或题准866HS P1D0宋角据剧神梗在多企瞎级语言混合编 和啡Ni 的每绩模型应半途状码段和教据段都可超过4K,被放置在有多MSDS 个段内,所以数据和代码都是远访问。 Windows Huge(巨型) 单个数据项可以超过64K,其它同 Large模型 MS-DOS Windows 所有代码和数据放置在个段中,但段地址是3位OS2 Flat(平展型)的,所以整个程序可为4GB。MASM60支持该模 Windows 型。 NT
存储模型 功 能 适用操 作系统 Tiny (微型) 所有数据和代码都放在一个段内,其访问都为 NEAR型,整个程序≤64K,并会产生.COM文件。 MS-DOS Small (小型) 所有代码在一个64KB的段内,所有数据在另一个 64KB的段内(包括数据段,堆栈段和附加段)。 MS-DOS Windows Medium (中型) 所有代码>64K时可放在多个代码段中,转移或调 用可为FAR型。所有数据限在一个段内,DS可保持 不变。 MS-DOS Windows Compact(紧凑型) 所有代码限在一个段内,转移或调用可为NEAR型。 数据>64K时,可放在多个段中。 MS-DOS Windows Large (大型) 允许代码段和数据段都可超过64K,被放置在有多 个段内,所以数据和代码都是远访问。 MS-DOS Windows Huge (巨型) 单个数据项可以超过64K,其它同Large模型 MS-DOS Windows Flat (平展型) 所有代码和数据放置在一个段中,但段地址是32位 的,所以整个程序可为4GB。MASM 6.0支持该模 型。 OS/2 Windows NT 在DOS下用汇编语言编程时,可根据程序的不同特点选择前6种模 型,一般可以选用SMALL模型。另外,TINY模型将产生COM程 序,其他模型产生EXE程序。FLAT模型只能运行在32位x86 CPU 上,DOS下不允许使用这种模型。当与高级语言混合编程时,两者 的存储模型应当一致