主题:[讨论]高手来看一下,这个问题用汇编怎么写啊
hujinbing
[专家分:20] 发布于 2006-04-08 19:25:00
[b]从键盘输入一个小写字母,要求显示其大写字母.[/b][em18]
回复列表 (共11个回复)
沙发
C语言爱好者 [专家分:19410] 发布于 2006-04-08 20:28:00
.model small
.code
.startup
mov ah, 01h
int 21h
mov ah, 02h
mov dl, 13
int 21h
mov dl, 10
int 21h
mov dl, al
sub dl, 20h
int 21h
mov ax, 4c00h
int 21h
.exit
end
板凳
hujinbing [专家分:20] 发布于 2006-04-08 21:13:00
第 1 楼
.model small
.code
.startup
mov ah, 01h
int 21h
mov ah, 02h
mov dl, 13
int 21h
mov dl, 10
int 21h
mov dl, al
sub dl, 20h
int 21h
mov ax, 4c00h
int 21h
.exit
end
该程序经过编译后有两个错误,我不知道错在哪,高手能看一下吗
3 楼
newzp [专家分:200] 发布于 2006-04-08 22:21:00
写了个简单的,没有判断输入的是否是小写字母
CODE SEGMENT
ASSUME CS:CODE
START: MOV AH,1
INT 21H
SUB AL,20H
MOV DL,AL
MOV AH,2
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
4 楼
C语言爱好者 [专家分:19410] 发布于 2006-04-09 00:05:00
该程序经过编译后有两个错误,我不知道错在哪,高手能看一下吗
-------------------------------------------
主要是masm有些版本不支持.startup和.exit两个简化段定义,要6.0以上才支持。你可以自己改成完整段定义的,或者用tasm汇编。
5 楼
hujinbing [专家分:20] 发布于 2006-04-09 13:27:00
第 4 楼
我是刚学者,不是很懂哦,不过还是非常感谢你,我用的是MASM5
6 楼
hujinbing [专家分:20] 发布于 2006-04-09 13:40:00
第 3 楼
CODE SEGMENT
ASSUME CS:CODE
START: MOV AH,1
INT 21H
SUB AL,20H
MOV DL,AL
MOV AH,2
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
程序中怎么没有堆栈段啊,堆栈段和代码段是必不可少的哦,书上是这么说的,但是我觉的这个题中堆栈段好象没有用到啊.我很矛盾.请指点.
*一般堆栈段在程序中起什么作用啊*
7 楼
C语言爱好者 [专家分:19410] 发布于 2006-04-09 21:50:00
我是刚学者,不是很懂哦,不过还是非常感谢你,我用的是MASM5
------------------------------------------------------
masm5尚未支持.startup和.exit两个简化段定义,masm6.0以上才支持。或者把代码修改为这样就行了:
.model small
.code
start: mov ah, 01h
int 21h
mov ah, 02h
mov dl, 13
int 21h
mov dl, 10
int 21h
mov dl, al
sub dl, 20h
int 21h
mov ax, 4c00h
int 21h
end start
8 楼
Runking [专家分:370] 发布于 2006-04-11 21:32:00
stack segment stack ; 字母小写变大写
db 1024 dup(0)
stack ends
data segment
buf1 = 128
buf db buf1
db 0
db buf1 dup(0)
data ends
code segment
assume ds:data,cs:code,ss:stack
start:
mov ax,data
mov ds,ax
mov dx,offset buf
mov bx,dx
mov ah,01h
mov al,[bx]
int 21h
mov ah,02h
mov dl,al
sub dl,20h
int 21h
mov ah,4ch
int 21h
code ends
end start
9 楼
Runking [专家分:370] 发布于 2006-04-11 21:34:00
这是一个月前的汇编作业,呵呵
10 楼
hujinbing [专家分:20] 发布于 2006-04-11 22:08:00
第 8 楼
stack segment stack ; 字母小写变大写
db 1024 dup(0)
stack ends
data segment
buf1 = 128
buf db buf1
db 0
db buf1 dup(0)
data ends
code segment
assume ds:data,cs:code,ss:stack
start:
mov ax,data
mov ds,ax
mov dx,offset buf
mov bx,dx
mov ah,01h
mov al,[bx]
int 21h
mov ah,02h
mov dl,al
sub dl,20h
int 21h
mov ah,4ch
int 21h
code ends
end start
该运行结果和第 3 楼的结果是一样的,相对来说还是有点复杂的.
还是非常感谢第 8 楼的回复.
我来回复