lab10

10.1

  1. assume cs:code
  2. data segment
  3. db 'Welcome to masm!',0
  4. data ends
  5. code segment
  6. start:
  7. call init_reg ;初始化寄存器
  8. call get_place ;获得目标位置
  9. call show_string ;显示字符串
  10. mov ax,4c00h
  11. int 21h
  12. ;====================================================
  13. init_reg:
  14. mov bx,0b800h
  15. mov es,bx ;es指向显存段
  16. mov bx,data
  17. mov ds,bx ;ds指向数据段
  18. mov dh,8
  19. mov dl,3
  20. mov cl,2 ;设置位置和颜色
  21. mov di,0 ;di寄存器确定显示位置, 通过es:[di]的方式表示显示的位置
  22. mov si,0 ;si寄存器确定每个字的位置,通过ds:[si]的表示字符串的每个字
  23. mov bh,cl
  24. ret
  25. ;====================================================
  26. get_place:
  27. mov al,160
  28. mul dh ;8位乘法的规则
  29. mov di,ax
  30. mov al,2
  31. mul dl
  32. add di,ax
  33. ret
  34. ;====================================================
  35. show_string:
  36. mov cx,0
  37. mov cl,ds:[si]
  38. jcxz showStringRet ;时刻关心每个数据的大小,从而确定合理的寄存器
  39. mov bl,ds:[si] ;bl是偶数位,存字符
  40. mov es:[di],bx
  41. add di,2 ;di指向下一个显存
  42. inc si ;si指向下一个字符
  43. jmp show_string
  44. showStringRet:
  45. ret
  46. code ends
  47. end start

image.png