鱼C论坛

 找回密码
 立即注册
楼主: 鱼丸醋面

求助大神帮我解决此题

[复制链接]
发表于 2012-9-29 13:01:25 | 显示全部楼层
首先文件名Dialog.asm
不可能是其他语言吧。
再者
                lea esi,szBuffer1
                                lea edi,szBuffer2
                                mov ecx,255
                        l:  mov dl,byte ptr[edi]
                                cmp [esi],dl
                                je same
                                invoke MessageBox,NULL,offset szText1,offset szCaption,MB_OK
                                jmp end1
                        same:
                                cmp ecx,0
                                je OK
                                inc esi
                                inc edi
                                dec ecx
                                jmp l
                        OK: invoke MessageBox,NULL,offset szText2,offset szCaption,MB_OK       
                        end1:
                        .endif
                .else
                        mov        eax,FALSE
                        ret
                .endif
                mov        eax,TRUE
                ret
代码中的这一段怎么说都是汇编吧。。:L
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-9-29 13:03:15 | 显示全部楼层
invoke是32位汇编的API调用指令
当然也有.if .else等伪指令,不过灵活性没有CMP好,而且无法和高级语言的if else比拟
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-9-29 13:04:36 | 显示全部楼层
最后说下编译器只能用MASM32,不能用16位的MASM5.0或者6.0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-9-29 13:39:39 | 显示全部楼层
他是想用16位汇编写,这个我写过,等我找出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-9-29 14:07:13 | 显示全部楼层
我以前写的找不到了,现在我重新写了一个给你看看,没用汇编比较指令,用自己写的比较

assume cs:cseg,ds:dseg

dseg segment
                   db 100 dup (0)
                   db 100 dup (0)
        szyes        db 'Yes',0dh,0ah,'$'
        szno        db 'NO',0dh,0ah,'$'
dseg ends

cseg segment
start:
        mov ax,dseg
        mov ds,ax
        mov si,0
        mov di,100

do:       
        mov ah,1
        int 21h
        cmp al,0dh                ;判断是否为回车键
        je str_next
        mov [si],al
        inc si
        jmp do
       
str_next:
        call newline
do2:
        mov ah,1
        int 21h
        cmp al,0dh
        je bijiao
        mov [di],al
        inc di
        jmp do2
       
bijiao:
        call newline
        mov ch,0
        mov si,0
        mov di,100
s:
        mov cl,[si]
        cmp cl,[di]
        jne no
        jcxz yes
        inc si
        inc di
        jmp s
       
no:
        mov dx,offset szno
        mov ah,9h
        int 21h
        jmp over
       
yes:
        mov dx,offset szyes
        mov ah,9h
        int 21h
       
over:
        mov ah,1
        int 21h
        mov ax,4c00h
        int 21h

;换行子程序
;说明:直接引用即可
newline proc
     push ax
     push dx         
     mov dl,0dh
     mov ah,2h
     int 21h
     mov dl,0ah
     mov ah,2h
     int 21h
          pop dx
     pop ax         
     ret
newline endp

cseg ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-9-29 14:07:54 | 显示全部楼层
以上代码我自己测试了下,正确的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-9-29 20:00:04 From FishC Mobile | 显示全部楼层
メ㊣逆ご帅☆ 发表于 2012-9-29 13:04
最后说下编译器只能用MASM32,不能用16位的MASM5.0或者6.0

嘿嘿,我不懂什么是16位32位的,不过我没见过你编的这样的,我是初学者。楼下这位哥们的我见过。不过还是谢谢您啦,帮我编了这么多。好人有好报
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-9-29 20:10:48 | 显示全部楼层

你采纳他吧
我原本想给你写个16位的。但是被抢先了,没办法,回来晚了。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-9-29 20:13:12 | 显示全部楼层
最后,楼主加油:D
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-9-29 22:36:03 | 显示全部楼层
阿卡0 发表于 2012-9-29 14:07
以上代码我自己测试了下,正确的。

好人啊,谢谢您了,祝你中秋十一双节快乐哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-9-29 22:37:23 | 显示全部楼层
メ㊣逆ご帅☆ 发表于 2012-9-29 20:10
你采纳他吧
我原本想给你写个16位的。但是被抢先了,没办法,回来晚了。。

你能给这个稍微改一下吗,题目要求是等提示之后再输入字符串,这个没有提示啊,麻烦你了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-9-29 22:38:13 | 显示全部楼层
メ㊣逆ご帅☆ 发表于 2012-9-29 20:13
最后,楼主加油

加 油!!!^^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-9-30 00:37:39 | 显示全部楼层
メ㊣逆ご帅☆ 发表于 2012-9-29 23:07
修改了下你自己看下满意不

补充内容 (2012-9-29 23:29):

后面的注释也是您自己写的吗,你好厉害啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-9-30 00:42:36 | 显示全部楼层
阿卡0 发表于 2012-9-29 14:07
我以前写的找不到了,现在我重新写了一个给你看看,没用汇编比较指令,用自己写的比较

assume cs:cseg,d ...

你们都好厉害啊,我得学多久才能达到这水平啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-9-30 07:45:54 | 显示全部楼层
鱼丸醋面 发表于 2012-9-30 00:37
后面的注释也是您自己写的吗,你好厉害啊

是我写的没错,但不厉害,以后你一样可以
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-10-2 16:54:15 | 显示全部楼层
要用什么语言都没说····
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-10-2 23:33:50 | 显示全部楼层
空瓶氧气 发表于 2012-10-2 16:54
要用什么语言都没说····

汇编语言啊,这里不就是汇编语言交流区吗,上面那位大神写的好长啊,你能不能帮我写个短点的啊,最好有注释,谢谢您了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-10-3 16:24:34 | 显示全部楼层
虽然已经解决了 我还是提供一下我的代码 大家互相学习嘛!!应该还可以简化的!
assume cs:code,ds:data
data segment
    a db 'please intput first string:',0dh,0ah,'


    b db 'please intput second string:',0dh,0ah,'


    s db 128 dup (0)
    d db 128 dup (0)
    e db 'The result is:',0dh,0ah,'Yes!',0dh,0ah,'


    f db 'The result is:',0dh,0ah,'No!',0dh,0ah,'


data ends

code segment
    start:      lea si,s
              lea di,d
             ;调用dos中断(9号),显示a所代表的字符串,下面5行
              mov ax,data       
              mov ds,ax
               lea dx,a
               mov ah,9 
               int 21h
               ;s0调用dos中断(1号), 键盘输入并回显,不清楚可以查中断表,下面7行
   s0:       mov ah,01h
               int 21h
               cmp al,0dh
               je s1
               mov byte ptr [si],al
               inc si
               jmp s0
              ;s1调用dos中短(2)号,显示输出,其实就是输入一个换行符,0ah代表换行,下面3行            
 s1:          mov ah,02h
                mov dl,0ah
               int 21h
               ;从下面开始和上面基本是一样,主要用于第二个字符串的输入            
               mov ax,data
               mov ds,ax
               lea dx,b
               mov ah,9 
               int 21h 
            
        s2:           mov ah,01h
               int 21h
               cmp al,0dh
               je   s3 
               mov byte ptr [di],al
               inc di
               jmp s2
            



补充内容 (2012-10-3 16:25):
刚学到中断,就用中断做了,不好勿喷!!谢谢

补充内容 (2012-10-3 16:26):
将第三行的intput改成input,写的快了就成了intput了

补充内容 (2012-10-3 16:29):
晕哦,这个怎么的,为什么代码不全,我把后面补起,后面还有一段
s3: mov ah,02h
            mov dl,0ah
            int 21h
            ;开始字符串的比较         
            push di
            sub di,12
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-10-3 16:32:53 | 显示全部楼层
assume cs:code,ds:data
data segment
    a db 'please intput first string:',0dh,0ah,'$'
    b db 'please intput second string:',0dh,0ah,'$'
    s db 128 dup (0)
    d db 128 dup (0)
    e db 'The result is:',0dh,0ah,'Yes!',0dh,0ah,'$'
    f db 'The result is:',0dh,0ah,'No!',0dh,0ah,'$'
data ends

code segment
    start:  lea si,s
            lea di,d
          ;调用dos中断(9号),显示a所代表的字符串,下面5行
            mov ax,data      
            mov ds,ax
            lea dx,a
            mov ah,9
            int 21h
          ;s0调用dos中断(1号), 键盘输入并回显,不清楚可以查中断表,下面7行
       s0:  mov ah,01h
            int 21h
            cmp al,0dh
            je s1
            mov byte ptr [si],al
            inc si
            jmp s0
           ;s1调用dos中短(2)号,显示输出,其实就是输入一个换行符,0ah代表换行,下面3行            
      s1:   mov ah,02h
            mov dl,0ah
            int 21h
            ;从下面开始和上面基本是一样,主要用于第二个字符串的输入            
            mov ax,data
            mov ds,ax
            lea dx,b
            mov ah,9
            int 21h

        s2: mov ah,01h
            int 21h
            cmp al,0dh
            je   s3
            mov byte ptr [di],al
            inc di
            jmp s2

        s3: mov ah,02h
            mov dl,0ah
            int 21h
            ;开始字符串的比较         
            push di
            sub di,128              ;di比si本身就多128个字符,这在定义时就决定了,所以要减去128
            cmp si,di               ;si和di比较,看字符串长度是否一样,不一样的话,直接跳出,不用比较了
            jne no
            pop di
            push si
            lea cx,s               
            sub si,cx                ;籹i减基址s才是长度
            mov cx,si                ;cx存的是字符串的长度
            pop si                   ;将si,pi压栈再弹栈,起一个暂存的作用
           ;个数一样时,进行逐次比较      
        s4: mov dl,[si]
            mov dh,[di]
            cmp dh,dl
            jne no
            dec si
            dec di
            loop s4

       yes: lea dx,e
            mov ah,9
            int 21h

           jmp start

         no:lea dx,f
            mov ah,9
            int 21h

           jmp start

code ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-10-4 12:33:37 | 显示全部楼层
不正常人类 发表于 2012-10-3 16:24
虽然已经解决了 我还是提供一下我的代码 大家互相学习嘛!!应该还可以简化的!

谢谢你了,好人哪
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 14:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表