王爽汇编第三版实验10.1

本文介绍了一个使用MASM编写的程序,该程序在指定位置显示字符串“welcome to masm!”。程序通过设置寄存器来定位屏幕上的显示位置,并设置颜色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. assume cs:code,ds:data,ss:stack  
  2.   
  3. data segment  
  4.     db 'welcome to masm!',0  
  5. data ends  
  6.   
  7. stack segment  
  8.     dw 8 dup (0)  
  9. stack ends  
  10.   
  11. code segment  
  12. start:  mov dh,8  
  13.     mov dl,3      ;第八行,第三列  
  14.   
  15.     mov cl,2      ;颜色  
  16.   
  17.     mov ax,data  
  18.     mov ds,ax     ;ds指向数据段  
  19.   
  20.     mov si,0  
  21.     call show_str  
  22.   
  23.     mov ax,4c00h  
  24.     int 21h  
  25.   
  26. show_str:  
  27.     push dx  
  28.     push cx  
  29.     push ax  
  30.     push ss  
  31.     push si    ;子程序开始所有寄存器入栈  
  32.   
  33.     mov ax,0B800h  
  34.     mov es,ax    ;es指向显示的起始地址  
  35.   
  36. ;计算行偏移量  
  37.     mov al,0a0h ;160个字节一行  
  38.     dec dh      ;行号减一,00 - dh-1  共dh行  
  39.     mul dh      ;相乘  结果放在ax里  
  40.     mov bx,ax   ;偏移量  
  41.       
  42.     mov al,2   ;一列两个字符  
  43.     dec dl      ;列号减一,00 -dl-1 共dl列  
  44.     mul al  
  45.     add bx,ax  ;偏移地址计算完成  
  46.   
  47.     mov di,0     ;di字符读取时候每次的偏移 每次加1  
  48.     mov si,0  
  49.       
  50.     mov al,cl   ;颜色暂时保存在al里 线面cx需要用到  
  51. s1:   
  52.     mov ch,0    ;置0  
  53.     mov cl,ds:[di]  ;字符放在cl里  
  54.     jcxz ok  
  55.     mov ch,al     
  56.     mov es:[bx+si],cx   ;字符颜色一起放入显示位置  
  57.   
  58.     add si,2  
  59.     inc di  
  60. jmp short s1  
  61. ok:   
  62.     pop si    ;子程序开始所有寄存器入栈  
  63.     pop ss  
  64.     pop ax  
  65.     pop cx  
  66.     pop dx  
  67.     ret  
  68.   
  69. code ends  
  70. end start  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值