メ㊣逆ご帅☆
发表于 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
虽然已经解决了 我还是提供一下我的代码 大家互相学习嘛!!应该还可以简化的!
谢谢你了,好人哪