lab 6

(1)

完成7.9 中的问题

编程, 将 datasg 段中每个单词的首字母字母改成大写字母

  1. assume cs:codesg,ss:stacksg,ds:datasg
  2. stacksg segment
  3. dw 0,0,0,0,0,0,0,0
  4. stacksg ends
  5. datasg segment
  6. db '1. display '
  7. db '2. brows '
  8. db '3. replace '
  9. db '4. modify '
  10. datasg ends
  11. codesg segment
  12. start: mov ax,datasg
  13. mov ds,ax
  14. mov cx,4
  15. mov bx,2
  16. s: and ds:[bx], 1101111111111111b
  17. add bx,16
  18. loop s
  19. mov ax,4c00h
  20. int 21h
  21. codesg ends
  22. end start

image.png

(2)

编程, 将 datasg 段中每个单词的前四个字母改成大写字母

  1. assume cs:codesg,ss:stacksg,ds:datasg
  2. stacksg segment
  3. dw 0,0,0,0,0,0,0,0 ;16个字节作为 cx 的暂存区
  4. stacksg ends
  5. datasg segment
  6. db '1. display '
  7. db '2. brows '
  8. db '3. replace '
  9. db '4. modify '
  10. datasg ends
  11. codesg segment
  12. start: mov ax,datasg
  13. mov ds,ax
  14. mov ax,stacksg
  15. mov ss,ax
  16. mov sp,16
  17. mov bx,0
  18. mov cx,4
  19. r: push cx
  20. mov cx,4
  21. mov si,0
  22. c: mov al,ds:[bx+si+3]
  23. and al,11011111b
  24. mov ds:3[bx+si],al
  25. inc si
  26. loop c
  27. pop cx
  28. add bx,16
  29. loop r
  30. mov ax,4c00h
  31. int 21h
  32. codesg ends
  33. end start

image.png

分析&总结

双循环, 可以用栈结构来暂存 cx的值, 如果是多个循环, 可以用sp 去改变暂存区的位置,
对于单字节的处理,
可以先用al 等可拆为单字节的寄存器 处理
然后再回 内存