汇编语言编程,将DATAS段中的每个单词的前4个字母改为大写并将改写后的结果分4行输出到屏幕上

编程,将DATAS段中的每个单词的前4个字母改为大写并将改写后的结果分4行输出到屏幕上

题目:
编程,将DATAS段中的每个单词的前4个字母改为大写并将改写后的结果分4行输出到屏幕上。

DATAS SEGMENT

db '1. display   $'

db '2. brows     $'

db '3. replace   $'

db '4. modify    $'

DATAS ENDS

STACKS SEGMENT

dw 0,0,0,0,0,0,0,0

STACKS ENDS

方案一:

DATAS SEGMENT

st1  db '1. display   $'

     db '2. brows     $'

     db '3. replace   $'

     db '4. modify    $'

DATAS ENDS



STACKS SEGMENT

    dw 0,0,0,0,0,0,0,0

STACKS ENDS



CODES SEGMENT

    ASSUME CS:CODES,DS:DATAS,SS:STACKS

START:

    MOV AX,DATAS

    MOV DS,AX

    

    mov ax,STACKS

    mov ss,ax

    mov sp,16

   

    mov cx,4  ;4行字符串要改写

    mov bx,0  ;字符串的起始地址

    

s2: push cx   ;保存外层循环的cx

    

    mov cx,4  ;要修改4个字符

    mov si,3  ;从字符串的第4个字符开始改写

s0: mov al,[bx+si]   ;取出字符

    and al,11011111b ;改成大写

    mov [bx+si],al   ;改写后的字符存回去

    inc si

    loop s0

    

    pop cx       ;恢复外层循环的cx

    add bx,14    ;下一行字符串的首地址

    loop s2   

    

    

    mov dx,offset st1

    mov cx,4

s1: 

    mov ah,09

    int 21h

    add dx,14

    push dx     ;保存dx的值,因为下面要输出一个换行符,会改变dx的当前值

    

    mov dl,10

    mov ah,02

    int 21h    ;输出一个换行符

    

    pop dx     ;恢复dx的值

    loop s1

    

    MOV AH,4CH

    INT 21H

CODES ENDS

    END START


方案二:

DATAS SEGMENT



   st1 db '1. display   $'



    db '2. brows     $'



    db '3. replace   $'



    db '4. modify    $'

datas ends

stacksg segment

 dw 0,0,0,0,0,0,0,0

stacksg ends



codesg segment

assume cs:codesg,ds:datas,ss:stacksg

start:

   mov ax,stacksg

   mov ss,ax

   mov sp,16

   mov ax,datas

   mov ds,ax

   mov bx,0

   mov cx,4

 

   s0:push cx

      mov si,0

      mov cx,4

 s:mov al,[bx+si+3]

   and al,11011111b

   mov [bx+si+3],al

   inc si

   loop s

   add bx,14

   pop cx

   loop s0

   mov dx,offset st1

   mov cx,4

  

   s1:mov ah,09

   int 21h

   add dx,14

   push dx

   mov dl,10

   mov ah,02

   int 21h

   pop dx

   loop s1

   mov ah,4ch

   int 21h

codesg ends

end start


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值