第六章循环与分支程序设计 anda1,ofh;取出要转换的4位二进制数,存入al寄存器中 cmpa1,10;判断是否为十进制数制的字符 jae changetoa_f;如果大于10,跳转到 changetoa f进行十六进制的转换 adda1,30h;0-9的十六进制转换 jmp disp changetoa f: ada1,37h;a-f的十六进制转换 Isp movd1,al;在屏幕上显示结果 moy ah. 02 int 21h dec ch;利用dec和jnz来实现循环操作,代替loop的功能 Jnz rotate
第六章第一章循环与分支程序设计 基础知识 and al , 0fh;取出要转换的4位二进制数,存入al寄存器中 cmp al , 10;判断是否为十进制数制的字符 jae changetoa_f ;如果大于10,跳转到changetoa_f进行十六进制的转换 add al , 30h ;0-9的十六进制转换 jmp disp changetoa_f: add al , 37h ;a-f的十六进制转换 disp: mov dl , al ;在屏幕上显示结果 mov ah , 02 int 21h dec ch ;利用dec 和jnz来实现循环操作,代替loop的功能 jnz rotate
第六章循环与分支程序设讣 mov ax, 4c00h int 21h main endp code seg ends end start 程序结束 例在ADDR单元中存放着数Y的地址,试编制一程序把Y中1的个数存入 COUNT单元中。 算法:要测出Y中1的个数就应逐位测试,一个比较简单的办法是可根据最高 有效位是否为1来记数,然后用移位的方法把各位数还次移到最高位去。循环 的结束可以用计数值为16来控制,但更好的办法是结合上述方法可以用测试数 是否为0来作为结束条件,这样可以在很多情况下缩短程序的执行时间。此外 考虑到Y本身为0的可能性,应该采用 WHILE-DO的结构形式
第六章第一章循环与分支程序设计 基础知识 mov ax , 4c00h int 21h main endp code_seg ends end start ;程序结束 例 在ADDR单元中存放着数Y的地址,试编制一程序把Y中1的个数存入 COUNT单元中。 算法:要测出Y中1的个数就应逐位测试,一个比较简单的办法是可根据最高 有效位是否为1来记数,然后用移位的方法把各位数逐次移到最高位去。循环 的结束可以用计数值为16来控制,但更好的办法是结合上述方法可以用测试数 是否为0来作为结束条件,这样可以在很多情况下缩短程序的执行时间。此外 考虑到Y本身为0的可能性,应该采用WHILE—DO的结构形式
第六章循环与分支程序设讣 程序框图 开始 初始化C=0 Y=0? COUNT. Y Y 结束 C=C+1 Y逻辑左移位
第六章第一章循环与分支程序设计 基础知识 程序框图
第六章循环与分支程序设计 程序: data seg segment moy bx, addr Y equ 020FH moⅴax,[bx] number dw y repeat addr dw number test ax. offffh count dw z result data seg ends jns shift code seg segment Inc CX assume cs: code_seg, ds: data_segl shift: main proc far ax start Jmp repeat mov ax, data seg result mov ds, ax moy count, cx moⅴcx,0 moⅴax,4co0h
第六章第一章循环与分支程序设计 基础知识 程序: data_seg segment Y equ 020FH number dw Y addr dw number count dw ? data_seg ends code_seg segment assume cs:code_seg , ds:data_seg main proc far start: mov ax ,data_seg mov ds ,ax mov cx ,0 mov bx ,addr mov ax ,[bx] repeat: test ax,0ffffh jz result jns shift inc cx shift: shl ax ,1 jmp repeat result: mov count , cx mov ax,4c00h
第六章循环与分支程序设讣 int 21h main endp code seg ends end start 例在附加段中有一个首地址为LⅠST和未经排序的字数组,在数组的第一个字 中存放着该数组的长度,数组的首地址已存放在DI寄存器中。AX寄存器中存放 着一个数。要求编制一程序:在数组中查找该数,如果找到此数则把它从数组中 删除。 算法:这一程序应该首先查找数组中是否有(AX),如果没有则不对数组作任 何处理就结束程序。如果找到这一元素则应把数组中位于其前(指地址比该元 素高)的元素后移一个字(即向低地址方向移动),并修改数组长度值。如果找 到的元素正好位于数组末尾,则不必移动任何元素,只要修改数组长度值就 可以。这里第一部分的查找元素可以使用串处理指令,第二部分的删除元素 则可使用循环结构,由于查找结束时就可以知道该元素的位置,因此可以作 为循环次数已知的情况来设计
第六章第一章循环与分支程序设计 基础知识 int 21h main endp code_seg ends end start 例 在附加段中有一个首地址为LIST和未经排序的字数组,在数组的第一个字 中存放着该数组的长度,数组的首地址已存放在DI寄存器中。AX寄存器中存放 着一个数。要求编制一程序:在数组中查找该数,如果找到此数则把它从数组中 删除。 算法: 这一程序应该首先查找数组中是否有(AX),如果没有则不对数组作任 何处理就结束程序。如果找到这一元素则应把数组中位于其前(指地址比该元 素高)的元素后移一个字(即向低地址方向移动),并修改数组长度值。如果找 到的元素正好位于数组末尾,则不必移动任何元素,只要修改数组长度值就 可以。这里第一部分的查找元素可以使用串处理指令,第二部分的删除元素 则可使用循环结构,由于查找结束时就可以知道该元素的位置,因此可以作 为循环次数已知的情况来设计