メ㊣逆ご帅☆ 发表于 2012-9-29 13:01:25

首先文件名Dialog.asm
不可能是其他语言吧。
再者
                lea esi,szBuffer1
                                lea edi,szBuffer2
                                mov ecx,255
                        l:mov dl,byte ptr
                                cmp ,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

メ㊣逆ご帅☆ 发表于 2012-9-29 13:03:15

invoke是32位汇编的API调用指令
当然也有.if .else等伪指令,不过灵活性没有CMP好,而且无法和高级语言的if else比拟

メ㊣逆ご帅☆ 发表于 2012-9-29 13:04:36

最后说下编译器只能用MASM32,不能用16位的MASM5.0或者6.0

阿卡0 发表于 2012-9-29 13:39:39

他是想用16位汇编写,这个我写过,等我找出来

阿卡0 发表于 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 ,al
        inc si
        jmp do
       
str_next:
        call newline
do2:
        mov ah,1
        int 21h
        cmp al,0dh
        je bijiao
        mov ,al
        inc di
        jmp do2
       
bijiao:
        call newline
        mov ch,0
        mov si,0
        mov di,100
s:
        mov cl,
        cmp cl,
        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

阿卡0 发表于 2012-9-29 14:07:54

以上代码我自己测试了下,正确的。

鱼丸醋面 发表于 2012-9-29 20:00:04

メ㊣逆ご帅☆ 发表于 2012-9-29 13:04
最后说下编译器只能用MASM32,不能用16位的MASM5.0或者6.0

嘿嘿,我不懂什么是16位32位的,不过我没见过你编的这样的,我是初学者。楼下这位哥们的我见过。不过还是谢谢您啦,帮我编了这么多。好人有好报

メ㊣逆ご帅☆ 发表于 2012-9-29 20:10:48

鱼丸醋面 发表于 2012-9-29 20:00 static/image/common/back.gif
嘿嘿,我不懂什么是16位32位的,不过我没见过你编的这样的,我是初学者。楼下这位哥们的我见过。不过还是 ...

你采纳他吧
我原本想给你写个16位的。但是被抢先了,没办法,回来晚了。。

メ㊣逆ご帅☆ 发表于 2012-9-29 20:13:12

最后,楼主加油:D

鱼丸醋面 发表于 2012-9-29 22:36:03

阿卡0 发表于 2012-9-29 14:07 static/image/common/back.gif
以上代码我自己测试了下,正确的。

好人啊,谢谢您了,祝你中秋十一双节快乐哈

鱼丸醋面 发表于 2012-9-29 22:37:23

メ㊣逆ご帅☆ 发表于 2012-9-29 20:10 static/image/common/back.gif
你采纳他吧
我原本想给你写个16位的。但是被抢先了,没办法,回来晚了。。

你能给这个稍微改一下吗,题目要求是等提示之后再输入字符串,这个没有提示啊,麻烦你了

鱼丸醋面 发表于 2012-9-29 22:38:13

メ㊣逆ご帅☆ 发表于 2012-9-29 20:13 static/image/common/back.gif
最后,楼主加油

加 油!!!^^

鱼丸醋面 发表于 2012-9-30 00:37:39

メ㊣逆ご帅☆ 发表于 2012-9-29 23:07 static/image/common/back.gif
修改了下你自己看下满意不

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

后面的注释也是您自己写的吗,你好厉害啊

鱼丸醋面 发表于 2012-9-30 00:42:36

阿卡0 发表于 2012-9-29 14:07 static/image/common/back.gif
我以前写的找不到了,现在我重新写了一个给你看看,没用汇编比较指令,用自己写的比较

assume cs:cseg,d ...

你们都好厉害啊,我得学多久才能达到这水平啊

メ㊣逆ご帅☆ 发表于 2012-9-30 07:45:54

鱼丸醋面 发表于 2012-9-30 00:37 static/image/common/back.gif
后面的注释也是您自己写的吗,你好厉害啊

是我写的没错,但不厉害,以后你一样可以

空瓶氧气 发表于 2012-10-2 16:54:15

要用什么语言都没说····

鱼丸醋面 发表于 2012-10-2 23:33:50

空瓶氧气 发表于 2012-10-2 16:54 static/image/common/back.gif
要用什么语言都没说····

汇编语言啊,这里不就是汇编语言交流区吗,上面那位大神写的好长啊,你能不能帮我写个短点的啊,最好有注释,谢谢您了

不正常人类 发表于 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 ,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 ,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

不正常人类 发表于 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 ,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 ,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,
            mov dh,
            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

鱼丸醋面 发表于 2012-10-4 12:33:37

不正常人类 发表于 2012-10-3 16:24 static/image/common/back.gif
虽然已经解决了 我还是提供一下我的代码 大家互相学习嘛!!应该还可以简化的!




谢谢你了,好人哪
页: 1 [2] 3
查看完整版本: 求助大神帮我解决此题