注册 登录
编程论坛 汇编论坛

[求助]一道简单的题

Sally_SJL 发布于 2006-11-30 22:26, 1962 次点击

STACK SEGMENT STACK
DB 100 DUP(?)
STACK ENDS

CODE SEGMENT
ASSUME CS:CODE,SS:STACK
START: MOV AH,01H
INT 21H
CMP AL,97
JGE P1
CMP AL,121
JNG P1
JMP EXIT
P1: SUB AL,20H
EXIT:
MOV DL,AL
MOV AH,02H
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START

帮我改改吧

输入小写的话,输出大写的,如果输入其他的话,就不变

24 回复
#2
菜鸟上路2006-11-30 22:43
提示下:

p0:
输入
cmp al,'a'
ja p1
jmp p0
p1:
cmp al,'z'
jb exit
sub 20h
输出
exit:
mov ax,4c00h
int 21h
#3
srl99732006-12-01 08:43
CODE SEGMENT
ASSUME CS:CODE,SS:STACK
START: MOV AH,01H
INT 21H
CMP AL,97
JB exit
CMP AL,'z'
JA exit

P1: SUB AL,20H
EXIT:
MOV DL,AL
MOV AH,02H
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
#4
Sally_SJL2006-12-01 15:09

谢谢楼上的两位!

不好意思,再麻烦大家一下

DATA SEGMENT
X DW 6
Y DW 3
Z DW 7
RESULT DW 2 DUP(?)
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV AX,X
IMUL X
MOV CX,AX
MOV BX,DX
MOV AX,Y
IMUL Y    
ADD CX,AX
ADC BX,DX
IDIV Z
MOV RESULT,AX
MOV RESULT+2,DX
MOV AH,4CH
INT 21H
CODE ENDS
END START

求s=(x*x+y*y)/z的值,并将结果放入RESULT单元

帮我看看上面写的对吗?这种调试的时候该怎么看结果是不是正确呢?


#5
菜鸟上路2006-12-01 16:32

.model small
.386
option casemap:none

data segment
x db 6
y db 3
z db 9
result word ?
data ends

code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov ax,word ptr x
mul x
mov result,ax
xor ax,ax
mov ax,word ptr y
mul y
add result,ax
mov ax,result
div z
mov result,0
mov result,ax

mov dx,result
add dx,30h
mov ah,02h
int 21h
mov ax,4c00h
int 21h
code ends
end start

#6
Sally_SJL2006-12-01 21:18

再次谢谢楼上的 ,
虽然我有点看不明白

#7
菜鸟上路2006-12-01 21:44
以下是引用Sally_SJL在2006-12-1 21:18:50的发言:

再次谢谢楼上的 ,
虽然我有点看不明白

哪里不明白的?

#8
Sally_SJL2006-12-02 21:35
以下是引用菜鸟上路在2006-12-1 16:32:37的发言:

.model small
.386
option casemap:none
; 这是什么意思啊?都没见过

data segment
x db 6
y db 3
z db 9
result word ?
data ends

code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov ax,word ptr x ; 这里是把x扩展成dw型吗?还是其他意思呢?
mul x ;这里执行x*x, 我的书上是IMUL, IMUL 和 MUL一样吗?
mov result,ax
xor ax,ax ; 这句语句是什么作用呢?
mov ax,word ptr y
mul y
add result,ax
mov ax,result
div z ;IDIV和 DIV也一样吗?
mov result,0
mov result,ax

mov dx,result
add dx,30h
mov ah,02h
int 21h
mov ax,4c00h
int 21h
code ends
end start

#9
Sally_SJL2006-12-02 21:41

你的程序,我没有运行出来,弄了张截图

[IMG]http://blog.bc-cn.net/UploadFiles/2006-12/122323389.jpg[/IMG]
#10
菜鸟上路2006-12-02 22:29
.model small ;类型为small
.386 ;386以后的机子都可以运行这个程序
option casemap:none ;可有可无

mov ax,word ptr x ;不是扩展成dw,是指定为dw
mul x ;无符号数乘法,imul是有符号数乘法
xor ax,ax ;对ax清零
div z ;同上解释

我运行的结果是6

[此贴子已经被作者于2006-12-2 22:35:38编辑过]

#11
Sally_SJL2006-12-02 22:46

为什么是6啊?
你定义的x=6,y=3,z=9,那么答案应该是5呀

那我上面的截图,link时,为什么出现了错误啊?

#12
菜鸟上路2006-12-02 22:50
以下是引用Sally_SJL在2006-12-2 22:46:45的发言:

为什么是6啊?
你定义的x=6,y=3,z=9,那么答案应该是5呀

那我上面的截图,link时,为什么出现了错误啊?

不好意思,我看错了,结果是5

#13
菜鸟上路2006-12-02 22:52
请问怎样不用编辑,直接把图片贴上来?
#14
Sally_SJL2006-12-02 23:05
我好象弄的比较麻烦,不过,我只会这样

用 ALT + PrintScreen 然后 粘贴到 photoshop中,再上传的
#15
菜鸟上路2006-12-02 23:31
以下是引用Sally_SJL在2006-12-2 23:05:08的发言:
我好象弄的比较麻烦,不过,我只会这样

用 ALT + PrintScreen 然后 粘贴到 photoshop中,再上传的

只有本站会员才能查看附件,请 登录

我改了数
data segment
x db 6
y db 3
z db 15
result word ?
data ends

还是直接编辑好点

[此贴子已经被作者于2006-12-2 23:33:22编辑过]

#16
a612654482006-12-04 12:32
我不大明白为何要先add dx,30h然后再输出。我是菜鸟,谢谢
#17
菜鸟上路2006-12-04 12:38
因为输出的是字符
#18
3037709572006-12-10 19:32
以下是引用菜鸟上路在2006-12-1 16:32:37的发言:

.model small
.386
option casemap:none

data segment
x db 6
y db 3
z db 9
result word ? ;请问这个定义是不是有问题啊?应该是:result dw ?
;我想这应该是上面的妹妹为什么编译不成功的主要原因吧?

data ends

code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov ax,word ptr x
mul x
mov result,ax
xor ax,ax
mov ax,word ptr y
mul y
add result,ax
mov ax,result
div z
mov result,0
mov result,ax

mov dx,result
add dx,30h
mov ah,02h
int 21h
mov ax,4c00h
int 21h
code ends
end start

#19
3037709572006-12-10 19:33
呵呵,想不到女孩子对汇编语言也这么感兴趣啊?不错,加油啊女孩!
#20
菜鸟上路2006-12-10 20:18
以下是引用303770957在2006-12-10 19:32:03的发言:

?不知道哪错了?不知你有没有运行?

#21
Sally_SJL2006-12-12 18:57
以下是引用303770957在2006-12-10 19:33:18的发言:
呵呵,想不到女孩子对汇编语言也这么感兴趣啊?不错,加油啊女孩!

不是感兴趣啦,纯粹是为了考试,不想被挂

#22
3037709572006-12-13 15:37
以下是引用菜鸟上路在2006-12-10 20:18:55的发言:

?不知道哪错了?不知你有没有运行?

不是我打击你,你自己看看能不能运行?是你自己没有运行吧?

只有本站会员才能查看附件,请 登录

#23
3037709572006-12-13 15:41

你在哪里见过有这样的定义?
data segment
x db 6
y db 3
z db 9
result word ? ;请问这个定义是不是有问题啊?应该是:result dw ?
;我想这应该是上面的妹妹为什么编译不成功的主要原因吧?
data ends

#24
菜鸟上路2006-12-13 15:59
你看下15楼的结果,跟你这样的人没什么讲的!!!

你自己不懂那样的定义,别说那是错的,乱叫有P用!!



#25
菜鸟上路2006-12-13 16:00
说你又怕打击你!!你恐怕基本定义都不会!?
1