鱼C论坛

 找回密码
 立即注册
查看: 5812|回复: 26

[技术交流] 考验你的汇编基本功(1)

[复制链接]
发表于 2011-12-25 22:52:27 | 显示全部楼层
本帖最后由 nbceshi 于 2011-12-25 22:54 编辑
  1. assume cs:code

  2. code segment
  3. start:        mov ax, 2000h
  4.                 mov es, ax                        ;设置目标段地址
  5.                 mov bx, 97                       ;赋予bx的初始值a的ASCII码
  6.                 mov cx, 26                       ;共有26个字母
  7.         s:        mov di, bx                      ;将偏移地址同步
  8.                 mov es:[di-97], bl              ;定位偏移地址,将字母写入目标地址
  9.                 inc bx                                ;自增字母和偏移地址
  10.                 loop s
  11.                
  12.                 mov ax, 3000h
  13.                 mov ss, ax                        ;设置栈段地址
  14.                 mov sp, 26                        ;栈指针
  15.                 mov di, 0                        ;重新定位字母初始偏移地址
  16.                 mov cx, 13                    ;因按字操作,故设置13次循环
  17.         s1:        mov ah, es:[di]         ;mov ax, es:[di]        ;取2个字母到ax        
  18.                 inc di                             ;xor ah, al                 ;交换字母位置         
  19.                 mov al, es:[di]               ;xor al, ah                                                        
  20.                 inc di                             ;xor ah, al                                                        
  21.                 and ax, 0dfdfh              ;and ax, 0dfdfh         ;转换为大写字母
  22.                 push ax                        ;push ax                    ;入栈即存放指定位置
  23.                 loop s1                         ;add di, 2                   ;准备取下2个字母
  24.                                                         ;loop s1
  25.                 mov ax, 4000h                ;取目标段地址
  26.                 mov ds, ax
  27.                 mov si, 0                        ;将目标偏移地址置0
  28.                 mov di, 0                        ;将小写字母的初始偏移地址置0
  29.                 mov cx, 13
  30.         s2:        pop ax                                ;出栈2个字母到ax
  31.                 add ax, es:[di]                ;加上小写字母的值
  32.                 mov ds:[si], ax                ;将计算后的值放入目标地址
  33.                 add di, 2
  34.                 add si, 2
  35.                 loop s2
  36.         
  37.                 mov ax, 4c00h
  38.                 int 21h

  39. code ends
  40. end start
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-12-30 12:02:21 | 显示全部楼层

呵呵,我没看完题就做了,不过你的不符合题意呀,题意要先第一步完成后再第二步,然后再第三步,不过思路不错,顶一个。
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-2 05:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表