回 帖 发 新 帖 刷新版面

主题:[讨论]高手来看一下,这个问题用汇编怎么写啊

[b]从键盘输入一个小写字母,要求显示其大写字母.[/b][em18]

回复列表 (共11个回复)

沙发

.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

板凳


 第 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 楼

写了个简单的,没有判断输入的是否是小写字母

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 楼

该程序经过编译后有两个错误,我不知道错在哪,高手能看一下吗
-------------------------------------------
主要是masm有些版本不支持.startup和.exit两个简化段定义,要6.0以上才支持。你可以自己改成完整段定义的,或者用tasm汇编。

5 楼

第 4 楼 
我是刚学者,不是很懂哦,不过还是非常感谢你,我用的是MASM5

6 楼

第 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 楼

我是刚学者,不是很懂哦,不过还是非常感谢你,我用的是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 楼

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 楼

这是一个月前的汇编作业,呵呵

10 楼

第 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 楼的回复.

我来回复

您尚未登录,请登录后再回复。点此登录或注册