您的位置:程序门 -> 硬件/嵌入开发 -> 片机/工控



求汇编程序 急急急急  十万火急


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


求汇编程序 急急急急 十万火急[已结贴,结贴人:henfeng]
发表于:2007-05-10 13:07:58 楼主
急求汇编程序     要求能实现输入,查找,统计,输出
如:输入一个字符串   查找有没有a(或60)要是有的话统计一共有几个a(或60)然后把结果输出    

二进制的数转换成十六进制(或十进制)以ascii码输出
“进制的数转换成十六进制(或十进制)以ascii码输出”意思是
输入一个字符串(是二进制的籽)   然后把二进制的数转换成十六进制(或十进制)以ascii码输出     能满足两位数的这样输出就行

还有   数据传递问题      
如   a   db   (..........)
      b   db     ..........
                  ..........
合并后再传递给c     然后输出
发表于:2007-05-10 13:40:541楼 得分:0
输入一个字符串   查找有没有a(或60)要是有的话统计一共有几个a(或60)然后把结果输出    

这个不难吧?
一个函数传入首地址,然后返回a的个数...
给c的伪码,如果你实在懒,你就反汇编吧...
如果你想更懒,那你来让我喂你吃饭吧.嘿嘿

//用户保证串的完整性,不考虑超长串.
int   xxa(const   char   *src)
{
        int   as   =   0;

        while   (*src)
        {
                if   ( 'a '   ==   *src   ++)
                {
                        as++;
                }
        }

        return   as;
}
发表于:2007-05-10 13:49:322楼 得分:0
二进制的数转换成十六进制(或十进制)以ascii码输出

我觉得最简单的方式是把二进制的串先变成数值
也就是:
从最高位起(从左向右),累积值   *   2   +   相应位的值,然后迭代这个过程,最终就能得到一个数值了.
然后将这个值的各个数字位+上 '0 '就变成了ascii码,调用哪一号中断来着就能显示了.

发表于:2007-05-10 13:51:533楼 得分:0
如   a   db   (..........)
      b   db     ..........
                  ..........
合并后再传递给c     然后输出

确保c的空间够,先把a放进去,放到 '\0 '.然后接着读b进去..

在汇编里就是一个基址变址寻址那很适合吧?

应该很爽是吧...
发表于:2007-05-10 13:52:534楼 得分:0
哥哥     我要的是汇编程序啊         我对汇编不灵啊
发表于:2007-05-10 14:04:105楼 得分:0
"楼主很懒 ";假设这个串放在60h中,返回值放r1中,a51描述.

            mov   r0,#60h

begin:mov   a,@r0
            jnz   cmp
            ren
cmp:     cjne   a,#60h,ne
            inc   r1
ne:       inc   r0
            sjmp   begin
发表于:2007-05-10 14:12:376楼 得分:0
data   segment
var   db       23,34,45,60,90
n     equ     $-var
str1       db     'find! ', '$ '
str2       db       'nofind! ' '$ '
data   ends
code   segment
          assume   cs:code,ds:data  
bg:     mov   ax,data
          mov   ds,ax
          mov   cx,n
          lea   si,var
next:   cmp   byte   ptr[si],60
            je     lp1
            inc   si
            loop   next
            mov   ah,9
            lea   dx,str2
            int   21h
            jmp   exit
lp1:       mov   ah,9
              lea   dx,str1
              int   21h
exit:     mov   ah,4ch
                int   21h
code       ends  
      end   bg      
这个可以找到60但是不能统计啊     怎么改呢
发表于:2007-05-10 17:14:317楼 得分:0
我的是能统计的,呵呵

你的不行哈?

如果你还不能把单片机汇编转到8086汇编,那...

嘿嘿
发表于:2007-05-10 18:30:088楼 得分:0
该回复于2007-12-28 12:34:31被管理员或版主删除
发表于:2007-05-11 14:16:529楼 得分:90
data   segment
var   db       23,34,45,60,90,00;00为结束
num   db   0                                     ;取一个变量
n     equ     $-var
str1       db     'find! ', '$ '
str2       db       'nofind! ' '$ '
data   ends
code   segment
          assume   cs:code,ds:data  
bg:     mov   ax,data
          mov   ds,ax
          mov   cx,n
          lea   si,var
next:  
            cmp   byte   ptr[si],00
            je   findover                   ;检查是否结束查找
            cmp   byte   ptr[si],60   ;是否为a,
            jne   noeq                         ;为不为a则转
            inc   num                           ;为a计数
noeq:   inc   si  
            loop   next


findover:
            cmp   num,00                     ;看看计数器里有没有值
            jne   lp1                           ;有a则转
            mov   ah,9                         ;没有a提示
            lea   dx,str2
            int   21h
            jmp   exit
lp1:      
              ;假设最多9个      
              mov   al,num                   ;显示个数
              add   al,30h
              mov   dl,al
              mov   ah,2
              int   21h                         ;2号功能调用
              mov   ah,9                       ;输出提示
              lea   dx,str1
              int   21h                        
exit:     mov   ah,4ch
                int   21h
code       ends  
      end   bg      

;在你的程序基础上做的修改...
;没有调试工具,你还得自己试试哈
发表于:2007-05-14 17:33:2910楼 得分:0
多谢了     现在一切都搞定了


快速检索

最新资讯
热门点击