主题:[转帖]Help 下个星期要上机的啊。5555
showtimefan
[专家分:0] 发布于 2006-04-20 13:07:00
题目不是很难,请各位高手帮帮忙,我下周要上机。可是还是不知道怎么做,
题目:指出指定内存单元中存放的字符串“大写字母”,“小写字母”结果放在指定
内存,并将结果在计算机显示!
谢谢了。。。
[em10][color=008000][/color]
回复列表 (共12个回复)
沙发
C语言爱好者 [专家分:19410] 发布于 2006-04-20 18:37:00
.model small
.data
source db 'sklDFerSDFer'
upper db 13, 10, upper-source+1 dup('$')
lower db 13, 10, upper-source+1 dup('$')
.code
start: mov ax, DGROUP
mov ds, ax
xor si, si
xor di, di
xor bx, bx
mov cx, upper-source
cycle: mov al, source[bx]
cmp al, 'A'
jb short cntnue
cmp al, 'z'
ja short cntnue
cmp al, 'Z'
ja short lwer
mov upper[si+2], al
inc si
jmp short cntnue
lwer: cmp al, 'a'
jb short cntnue
mov lower[di+2], al
inc di
cntnue: inc bx
loop cycle
mov ah, 9
mov dx, offset DGROUP: upper
int 21h
mov ah, 9
mov dx, offset DGROUP: lower
int 21h
mov ax, 4c00h
int 21h
end start
板凳
showtimefan [专家分:0] 发布于 2006-04-21 00:58:00
谢谢你,不过我有些地方感觉看的不是很懂啊,对着书看很久了。
可以在每行后面帮我加下注释吗?我知道这样要求很过了,谢谢啊。。
我还是菜鸟!
3 楼
showtimefan [专家分:0] 发布于 2006-04-21 02:00:00
我边看书边琢磨,改了后代码是这样的,可是编译出错了好多,不知道怎么改,
大哥再帮忙下哈!
DATA SEGMENT
SOURCE DB 'SKLDFERSDFER'
UPPER DB 13,10,UPPER-SOURCE+1 DUP('$')
LOWER DB 13,10,UPPER-SOURCE+1 DUP('$')
DATA ENDS
CODE SEGMENT
SSUME CS: CODE,DS:dATA
START: MOV AX,DATA
MOV DS,AX
XOR SI,SI
XOR DI,DI
XOR BX,BX
MOV CX,UPPER-SOURCE
CYCLE: MOV AL,SOURCE[BX]
CMP AL,'A'
JB SHORT CNTNUE
CMP AL,'Z'
JA SHORT CNTNUE
CMP AL,'Z'
JA SHORT LWER
MOV UPPER[SI+2],AL
INC SI
JMP SHORT CNTNUE
LWER: CMP AL,'A'
JB SHORT CNTNUE
MOV LOWER[DI+2],AL
INC DI
CNTNUE: INC BX
LOOP CYCLE
MOV AH,9
MOV DX,OFFSET DGROUP: UPPER
INT 21H
MOV AH,9
MOV DX,OFFSET DGROUP: LOWER
INT 21H
MOV AX,4C00H
INT 21H
CODE ENDS
END START
END
4 楼
C语言爱好者 [专家分:19410] 发布于 2006-04-21 10:39:00
用完整段定义时,不存在DGROUP默认组,因此offset DGROUP: 改为offset。
除非你先定义
DGROUP group DATA
5 楼
showtimefan [专家分:0] 发布于 2006-04-21 10:47:00
直接去掉就可以了?
6 楼
showtimefan [专家分:0] 发布于 2006-04-21 10:55:00
如果编一个宏来指示输出的话。怎么加呢?
上面的代码考虑到空格的情况了吗?
ccrf macro
mov Ah 2h
mov Dl 0dh
INT 21H
MOV AH 02H
MOV DL 0AH
INT 21H
END M
7 楼
showtimefan [专家分:0] 发布于 2006-04-21 11:00:00
我怎么老编译不过去。好象都是cs错误的
8 楼
C语言爱好者 [专家分:19410] 发布于 2006-04-21 12:17:00
两个操作数之间都没有逗号,怎会编译得过去。
还有endm不能写为end m。
9 楼
showtimefan [专家分:0] 发布于 2006-04-23 14:19:00
UPPER DB 13,10,UPPER-SOURCE+1 DUP('$')
LOWER DB 13,10,UPPER-SOURCE+1 DUP('$')
这段是什么意思呢?13,10?
还有pper 是会直接指向字符串下标的最高位吗?
10 楼
C语言爱好者 [专家分:19410] 发布于 2006-04-23 16:22:00
13、10是回车换行,不加上这两个,显示的时候就会连在一行上了。upper是那段空间的首地址。
我来回复