⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 viterbi_asm_decoder.asm

📁 非常简洁的Viterbi译码汇编程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
  .bss Tdr,4,4       ; 微分Tdr值
  .bss DStCurrbss,4,4      ; 当前延迟状态指针
  .bss DelayPath,320,4      ; 延迟状态和路径状态向量(半字格式)
  .bss AccDist,32,4      ; 距离累积值向量(字格式)

  .bss Distance,32,4      ; 距离结果向量(字格式)
  .bss Dummy,2,2       ; 允许同步进入 
  .bss State,16,4       ; 状态向量(半字格式)
  .bss MCurr,4,4       ; 存储当前调制指针

SK   .set 1024        ; 比例因子

  .sect "LUTable" 

MMMMM  .set 0x7FFF      ; 有符号数据最大值
SS    .set 0xFFFF      ; 无符号数据最大值 
SZ    .set 3       ; 数据指针字大小

 .def _M14         
_M14:          ; 调整方式为14.4 kbps 
 .int M140         ; 首地址 
 .int 0x35E        ; 提取第4和第5位 
 .int 0x39C        ; 提取第0到第3位
 .int 4         ; 移位累加值 

M140 .int M141        ; 下一个地址
 .short -5*SK,-6*SK,4*SK,4*SK,(3+1)*SZ,(4+1)*SZ   ; Ys,Xs,Yq,Xq,Ny+1,Nx+1 
 .short -7*SK,-4*SK,-3*SK,-8*SK,0x05,0x00    ; Y0,X0,Y1,X1,S0,S1 
 .short -7*SK,-4*SK,MMMMM,MMMMM,0x05,SS 
 .short -7*SK,+0*SK,MMMMM,MMMMM,0x07,SS 
 .short -7*SK,+4*SK,MMMMM,MMMMM,0x03,SS 
 .short -7*SK,+4*SK,-3*SK,+8*SK,0x03,0x01 
 .short -3*SK,-8*SK,MMMMM,MMMMM,0x00,SS 
 .short -3*SK,-4*SK,MMMMM,MMMMM,0x04,SS 
 .short -3*SK,+0*SK,MMMMM,MMMMM,0x06,SS 
 .short -3*SK,+4*SK,MMMMM,MMMMM,0x02,SS 
 .short -3*SK,+8*SK,MMMMM,MMMMM,0x01,SS 
 .short +1*SK,-8*SK,MMMMM,MMMMM,0x08,SS 
 .short +1*SK,-4*SK,MMMMM,MMMMM,0x0C,SS 
 .short +1*SK,+0*SK,MMMMM,MMMMM,0x0E,SS 
 .short +1*SK,+4*SK,MMMMM,MMMMM,0x0A,SS 
 .short +1*SK,+8*SK,MMMMM,MMMMM,0x09,SS 
 .short +5*SK,-4*SK,+1*SK,-8*SK,0x0D,0x08 
 .short +5*SK,-4*SK,MMMMM,MMMMM,0x0D,SS 
 .short +5*SK,+0*SK,MMMMM,MMMMM,0x0F,SS 
 .short +5*SK,+4*SK,MMMMM,MMMMM,0x0B,SS 
 .short +5*SK,+4*SK,+1*SK,+8*SK,0x0B,0x09 

M141 .int M142           ; 下一个地址
 .short -3*SK,-6*SK,4*SK,4*SK,(3+1)*SZ,(4+1)*SZ    ; Ys,Xs,Yq,Xq,Ny+1,Nx+1 
 .short -5*SK,-4*SK,-1*SK,-8*SK,0x1B,0x19     ; Y0,X0,Y1,X1,S0,S1 
 .short -5*SK,-4*SK,MMMMM,MMMMM,0x1B,SS 
 .short -5*SK,+0*SK,MMMMM,MMMMM,0x1F,SS 
 .short -5*SK,+4*SK,MMMMM,MMMMM,0x1D,SS 
 .short -5*SK,+4*SK,-1*SK,+8*SK,0x1D,0x18 
 .short -1*SK,-8*SK,MMMMM,MMMMM,0x19,SS 
 .short -1*SK,-4*SK,MMMMM,MMMMM,0x1A,SS 
 .short -1*SK,+0*SK,MMMMM,MMMMM,0x1E,SS 
 .short -1*SK,+4*SK,MMMMM,MMMMM,0x1C,SS 
 .short -1*SK,+8*SK,MMMMM,MMMMM,0x18,SS 
 .short +3*SK,-8*SK,MMMMM,MMMMM,0x11,SS 
 .short +3*SK,-4*SK,MMMMM,MMMMM,0x12,SS 
 .short +3*SK,+0*SK,MMMMM,MMMMM,0x16,SS 
 .short +3*SK,+4*SK,MMMMM,MMMMM,0x14,SS 
 .short +3*SK,+8*SK,MMMMM,MMMMM,0x10,SS 
 .short +7*SK,-4*SK,+3*SK,-8*SK,0x13,0x11 
 .short +7*SK,-4*SK,MMMMM,MMMMM,0x13,SS 
 .short +7*SK,+0*SK,MMMMM,MMMMM,0x17,SS 
 .short +7*SK,+4*SK,MMMMM,MMMMM,0x15,SS 
 .short +7*SK,+4*SK,+3*SK,+8*SK,0x15,0x10 
 
M142 .int M143 ; Next address 
 .short -7*SK,-4*SK,4*SK,4*SK,(4+1)*SZ,(3+1)*SZ    ; Ys,Xs,Yq,Xq,Ny+1,Nx+1 
 .short -9*SK,-2*SK,-5*SK,-6*SK,0x28,0x2D     ; Y0,X0,Y1,X1,S0,S1
 .short -9*SK,-2*SK,MMMMM,MMMMM,0x28,SS 
 .short -9*SK,+2*SK,MMMMM,MMMMM,0x20,SS 
 .short -9*SK,+2*SK,-5*SK,+6*SK,0x20,0x25 
 .short -5*SK,-6*SK,MMMMM,MMMMM,0x2D,SS 
 .short -5*SK,-2*SK,MMMMM,MMMMM,0x2C,SS 
 .short -5*SK,+2*SK,MMMMM,MMMMM,0x24,SS 
 .short -5*SK,+6*SK,MMMMM,MMMMM,0x25,SS 
 .short -1*SK,-6*SK,MMMMM,MMMMM,0x2F,SS 
 .short -1*SK,-2*SK,MMMMM,MMMMM,0x2E,SS 
 .short -1*SK,+2*SK,MMMMM,MMMMM,0x26,SS 
 .short -1*SK,+6*SK,MMMMM,MMMMM,0x27,SS 
 .short +3*SK,-6*SK,MMMMM,MMMMM,0x2B,SS 
 .short +3*SK,-2*SK,MMMMM,MMMMM,0x2A,SS 
 .short +3*SK,+2*SK,MMMMM,MMMMM,0x22,SS 
 .short +3*SK,+6*SK,MMMMM,MMMMM,0x23,SS 
 .short +7*SK,-2*SK,+3*SK,-6*SK,0x29,0x2B 
 .short +7*SK,-2*SK,MMMMM,MMMMM,0x29,SS 
 .short +7*SK,+2*SK,MMMMM,MMMMM,0x21,SS 
 .short +7*SK,+2*SK,+3*SK,+6*SK,0x21,0x23 
 
M143 .int M144 ; Next address 
 .short -5*SK,-4*SK,4*SK,4*SK,(4+1)*SZ,(3+1)*SZ   ; Ys,Xs,Yq,Xq,Ny+1,Nx+1 
 .short -7*SK,-2*SK,-3*SK,-6*SK,0x31,0x33    ; Y0,X0,Y1,X1,S0,S1 
 .short -7*SK,-2*SK,MMMMM,MMMMM,0x31,SS 
 .short -7*SK,+2*SK,MMMMM,MMMMM,0x39,SS 
 .short -7*SK,+2*SK,-3*SK,+6*SK,0x39,0x3B 
 .short -3*SK,-6*SK,MMMMM,MMMMM,0x33,SS 
 .short -3*SK,-2*SK,MMMMM,MMMMM,0x32,SS 
 .short -3*SK,+2*SK,MMMMM,MMMMM,0x3A,SS 
 .short -3*SK,+6*SK,MMMMM,MMMMM,0x3B,SS 
 .short +1*SK,-6*SK,MMMMM,MMMMM,0x37,SS 
 .short +1*SK,-2*SK,MMMMM,MMMMM,0x36,SS 
 .short +1*SK,+2*SK,MMMMM,MMMMM,0x3E,SS 
 .short +1*SK,+6*SK,MMMMM,MMMMM,0x3F,SS 
 .short +5*SK,-6*SK,MMMMM,MMMMM,0x35,SS 
 .short +5*SK,-2*SK,MMMMM,MMMMM,0x34,SS 
 .short +5*SK,+2*SK,MMMMM,MMMMM,0x3C,SS 
 .short +5*SK,+6*SK,MMMMM,MMMMM,0x3D,SS 
 .short +9*SK,-2*SK,+5*SK,-6*SK,0x30,0x35 
 .short +9*SK,-2*SK,MMMMM,MMMMM,0x30,SS 
 .short +9*SK,+2*SK,MMMMM,MMMMM,0x38,SS 
 .short +9*SK,+2*SK,+5*SK,+6*SK,0x38,0x3D 
 
M144 .int M145          ; 下一个地址
 .short -4*SK,-5*SK,4*SK,4*SK,(3+1)*SZ,(4+1)*SZ   ; Ys,Xs,Yq,Xq,Ny+1,Nx+1 
 .short -6*SK,-3*SK,-2*SK,-7*SK,0x4B,0x49    ; Y0,X0,Y1,X1,S0,S1 
 .short -6*SK,-3*SK,MMMMM,MMMMM,0x4B,SS 
 .short -6*SK,+1*SK,MMMMM,MMMMM,0x4F,SS 
 .short -6*SK,+5*SK,MMMMM,MMMMM,0x4D,SS 
 .short -6*SK,+5*SK,-2*SK,+9*SK,0x4D,0x48 
 .short -2*SK,-7*SK,MMMMM,MMMMM,0x49,SS 
 .short -2*SK,-3*SK,MMMMM,MMMMM,0x4A,SS 
 .short -2*SK,+1*SK,MMMMM,MMMMM,0x4E,SS 
 .short -2*SK,+5*SK,MMMMM,MMMMM,0x4C,SS 
 .short -2*SK,+9*SK,MMMMM,MMMMM,0x48,SS 
 .short +2*SK,-7*SK,MMMMM,MMMMM,0x41,SS 
 .short +2*SK,-3*SK,MMMMM,MMMMM,0x42,SS 
 .short +2*SK,+1*SK,MMMMM,MMMMM,0x46,SS 
 .short +2*SK,+5*SK,MMMMM,MMMMM,0x44,SS 
 .short +2*SK,+9*SK,MMMMM,MMMMM,0x40,SS 
 .short +6*SK,-3*SK,+2*SK,-7*SK,0x43,0x41 
 .short +6*SK,-3*SK,MMMMM,MMMMM,0x43,SS 
 .short +6*SK,+1*SK,MMMMM,MMMMM,0x47,SS 
 .short +6*SK,+5*SK,MMMMM,MMMMM,0x45,SS 
 .short +6*SK,+5*SK,+2*SK,+9*SK,0x45,0x40 
 
M145 .int M146           ; 下一个地址
 .short -4*SK,-7*SK,4*SK,4*SK,(3+1)*SZ,(4+1)*SZ    ; Ys,Xs,Yq,Xq,Ny+1,Nx+1 
 .short -6*SK,-5*SK,-2*SK,-9*SK,0x55,0x50     ; Y0,X0,Y1,X1,S0,S1 
 .short -6*SK,-5*SK,MMMMM,MMMMM,0x55,SS 
 .short -6*SK,-1*SK,MMMMM,MMMMM,0x57,SS 
 .short -6*SK,+3*SK,MMMMM,MMMMM,0x53,SS 
 .short -6*SK,+3*SK,-2*SK,+7*SK,0x53,0x51 
 .short -2*SK,-9*SK,MMMMM,MMMMM,0x50,SS 
 .short -2*SK,-5*SK,MMMMM,MMMMM,0x54,SS 
 .short -2*SK,-1*SK,MMMMM,MMMMM,0x56,SS 
 .short -2*SK,+3*SK,MMMMM,MMMMM,0x52,SS 
 .short -2*SK,+7*SK,MMMMM,MMMMM,0x51,SS 
 .short +2*SK,-9*SK,MMMMM,MMMMM,0x58,SS 
 .short +2*SK,-5*SK,MMMMM,MMMMM,0x5C,SS 
 .short +2*SK,-1*SK,MMMMM,MMMMM,0x5E,SS 
 .short +2*SK,+3*SK,MMMMM,MMMMM,0x5A,SS 
 .short +2*SK,+7*SK,MMMMM,MMMMM,0x59,SS 
 .short +6*SK,-5*SK,+2*SK,-9*SK,0x5D,0x58 
 .short +6*SK,-5*SK,MMMMM,MMMMM,0x5D,SS 
 .short +6*SK,-1*SK,MMMMM,MMMMM,0x5F,SS 
 .short +6*SK,+3*SK,MMMMM,MMMMM,0x5B,SS 
 .short +6*SK,+3*SK,+2*SK,+7*SK,0x5B,0x59 
 
M146 .int M147           ; 下一个地址
 .short -6*SK,-5*SK,4*SK,4*SK,(4+1)*SZ,(3+1)*SZ    ; Ys,Xs,Yq,Xq,Ny+1,Nx+1 
 .short -8*SK,-3*SK,-4*SK,-7*SK,0x61,0x63     ; Y0,X0,Y1,X1,S0,S1 
 .short -8*SK,-3*SK,MMMMM,MMMMM,0x61,SS 
 .short -8*SK,+1*SK,MMMMM,MMMMM,0x69,SS 
 .short -8*SK,+1*SK,-4*SK,+5*SK,0x69,0x6B 
 .short -4*SK,-7*SK,MMMMM,MMMMM,0x63,SS 
 .short -4*SK,-3*SK,MMMMM,MMMMM,0x62,SS 
 .short -4*SK,+1*SK,MMMMM,MMMMM,0x6A,SS 
 .short -4*SK,+5*SK,MMMMM,MMMMM,0x6B,SS 
 .short +0*SK,-7*SK,MMMMM,MMMMM,0x67,SS 
 .short +0*SK,-3*SK,MMMMM,MMMMM,0x66,SS 
 .short +0*SK,+1*SK,MMMMM,MMMMM,0x6E,SS 
 .short +0*SK,+5*SK,MMMMM,MMMMM,0x6F,SS 
 .short +4*SK,-7*SK,MMMMM,MMMMM,0x65,SS 
 .short +4*SK,-3*SK,MMMMM,MMMMM,0x64,SS 
 .short +4*SK,+1*SK,MMMMM,MMMMM,0x6C,SS 
 .short +4*SK,+5*SK,MMMMM,MMMMM,0x6D,SS 
 .short +8*SK,-3*SK,+4*SK,-7*SK,0x60,0x65 
 .short +8*SK,-3*SK,MMMMM,MMMMM,0x60,SS 
 .short +8*SK,+1*SK,MMMMM,MMMMM,0x68,SS 
 .short +8*SK,+1*SK,+4*SK,+5*SK,0x68,0x6D 
 
M147 .int M140           ; 下一个地址
 .short -6*SK,-3*SK,4*SK,4*SK,(4+1)*SZ,(3+1)*SZ    ; Ys,Xs,Yq,Xq,Ny+1,Nx+1 
 .short -8*SK,-1*SK,-4*SK,-5*SK,0x78,0x7D     ; Y0,X0,Y1,X1,S0,S1 
 .short -8*SK,-1*SK,MMMMM,MMMMM,0x78,SS 
 .short -8*SK,+3*SK,MMMMM,MMMMM,0x70,SS 
 .short -8*SK,+3*SK,-4*SK,+7*SK,0x70,0x75 
 .short -4*SK,-5*SK,MMMMM,MMMMM,0x7D,SS 
 .short -4*SK,-1*SK,MMMMM,MMMMM,0x7C,SS 
 .short -4*SK,+3*SK,MMMMM,MMMMM,0x74,SS 
 .short -4*SK,+7*SK,MMMMM,MMMMM,0x75,SS 
 .short +0*SK,-5*SK,MMMMM,MMMMM,0x7F,SS 
 .short +0*SK,-1*SK,MMMMM,MMMMM,0x7E,SS 
 .short +0*SK,+3*SK,MMMMM,MMMMM,0x76,SS 
 .short +0*SK,+7*SK,MMMMM,MMMMM,0x77,SS 
 .short +4*SK,-5*SK,MMMMM,MMMMM,0x7B,SS 
 .short +4*SK,-1*SK,MMMMM,MMMMM,0x7A,SS 
 .short +4*SK,+3*SK,MMMMM,MMMMM,0x72,SS 
 .short +4*SK,+7*SK,MMMMM,MMMMM,0x73,SS 
 .short +8*SK,-1*SK,+4*SK,-5*SK,0x79,0x7B 
 .short +8*SK,-1*SK,MMMMM,MMMMM,0x79,SS 
 .short +8*SK,+3*SK,MMMMM,MMMMM,0x71,SS 
 .short +8*SK,+3*SK,+4*SK,+7*SK,0x71,0x73 
 
 .def _M12 ; Make this table visible to outside. 
_M12:            ; 调制方式为12.0 kbps,代码同上
            ; 参数不同,根据需要修改参数
 ; . . . 
  
TMBack  .int 0x03122130         ; 定义矩阵43 42 41 40 03 02 01 00 
  .int 0x65475674            ;  53 52 51 50 13 12 11 10 
  .int 0x12033021          ;  63 62 61 60 23 22 21 20 
  .int 0x74564765          ;  73 72 71 70 33 32 31 30 
 
Diff .int 0x1B4EE1B4          

 .text 
 .def _Init 
_Init:             ; DStCurrbss = *DelayPath.
 MVK DStCurrbss,A0 
 MVKH DStCurrbss,A0 
 MVK DelayPath,A1 
 MVKH DelayPath,A1 
 STW A1,*A0 
 MVK 16,B0 
PLoop:             ; DelayPath[i][j] = 0
 MVK 10,B1           ; i=0~15, j=0~9
 ZERO A0 
KLoop: 
 SUB 10,B1,A3 
 STH A0,*+A1[A3] 
 [B1] SUB B1,1,B1 
 [B1] B KLoop 
 NOP 5 
 ADDAH A1,10,A1 
 [B0] SUB B0,1,B0 
 [B0] B PLoop 
 NOP 5 
 
 MVK SK/2,A0 
 MVK AccDist,A1 
 MVKH AccDist,A1 
 MVK 8,B0 
ILoop:             ; AccDist[i] = 512, i=1~7
 SUB 8,B0,A3           ; AccDist[0] = 0
 STW A0,*+A1[A3] 
 [B0] SUB B0,1,B0 
 [B0] B ILoop 
 NOP 5 
 ZERO A0 
 STW A0,*+A1[0] 
 
 ZERO A0 
 MVK Tdr,A1 
 MVKH Tdr,A1 
 STW A0,*A1 
 
 B B3 
 NOP 5 

DStCurr  .set A13      ; 当前延迟状态指针
TT0   .set A1       ; 临时变量,用于测试
TT1   .set B1       ; 临时变量,用于测试
Q0   .set A3       ; 临时变量
Q1   .set B3       ; 临时变量
W0   .set A6       ; 临时变量
W1   .set B6       ; 临时变量
DS0   .set A0       ; 延迟状态0 
DS1   .set B0       ; 延迟状态1 
DS2   .set A1       ; 延迟状态2 
DS3   .set B1      ; 延迟状态3 
DS4   .set A2      ; 延迟状态4 
DS5   .set B2       ; 延迟状态5 
DS6   .set A3       ; 延迟状态6 
DS7   .set B3       ; 延迟状态7 
Dist0  .set A7       ; 距离0 
Dist1  .set B7       ; 距离1 

G0   .set A5       ; 距离累积值0 
G1   .set B5       ; 距离累积值1
G2   .set A10      ; 距离累积值2
G3   .set B10       ; 距离累积值3
G4  .set A11       ; 距离累积值4
G5   .set B11       ; 距离累积值5
G6   .set A9       ; 距离累积值6
G7   .set B9       ; 距离累积值7

TTT  .set A8      ; 跟踪回溯状态地址

 .def _Viterbi 
 .text 
_Viterbi: 
        ; Viterbi译码第一步
        ; 分配堆栈空间存储B3、A10~A13、B10~B13
        ; 将参数3(A6)存储到MCurr
        ; 设置当前延迟状态指针为DStCurr
 MV A6,B6 ;* 
 || LDW *A6,MCurr0     ; 得到首个调制数据表
 || SUBAW B15,9,B15     ; 分配存储空间
 
 MVK MCurr,B0      
 || MVK DStCurrbss,A1     
 || MV B15,A9      ; 设置快速存储寄存器 
 || STW B3,*+B15[1]     ; 保存寄存器内容
 
 MVKH MCurr,B0      
 || MVKH DStCurrbss,A1     
 || STW A13,*+A9[8]     ; 保存寄存器内容
 || STW B13,*+B15[9]     ; 保存寄存器内容
 
 STW B6,*B0      ; 保存当前指针
 || LDW *A1,DStCurr     ; 取延迟状态指针

 STW A12,*+A9[6]     ; 保存寄存器内容
 || STW B12,*+B15[7]     ; 保存寄存器内容
        ; Viterbi译码第二步
        ; 输入为Xi和Yi,输出为距离和状态
        ; 基于输入Xi和Yi计算距离和状态值
XY   .set A0      ; X、Y 用于SUB2指令操作
Cc   .set B0      ; 循环计数器
Xt   .set A1      ; 测试X 
Yt   .set B1      ; 测试Y 
S1   .set A1      ; 状态 1 
S0   .set B1      ; 状态0 
TT   .set B2      ; 临时变量 
Nx   .set A3      ; Nx 
Ny   .set B3      ; Ny 
Xi   .set A4      ; 接收数据参数1
Yi   .set B4      ; 接收数据参数2 
Xs   .set A5      ; Xs 
Ys   .set B5     ; Ys 
MCurr0  .set A6      ; 位速率调整表 
StateP  .set B6      ; 状态结果指针 
Xq   .set A7      ; Xq 
Yq   .set B7      ; Yq 
DistP  .set A8      ; 距离结果指针
MCurr1  .set B8      ; B组寄存器指针
Ix   .set A9      ; X索引
Iy   .set B9      ; Y索引
Id0   .set A9      ; 区域结果
Id1   .set B9      ; B组寄存器区域结果
P2   .set A9      ; 乘法寄存器
P3   .set B9      ; 乘法寄存器
T0   .set A10      ; 临时寄存器 
T1   .set B10      ; 临时寄存器
P0   .set A10      ; 乘法寄存器
P1   .set B10      ; 乘法寄存器
T2   .set A11      ; 临时寄存器
T3   .set B11      ; 临时寄存器
MNext0  .set A12      ; 下一个表指针

Step2: 
 MV MCurr0,TT      
 || MVK State,StateP     ; 设置状态结果指针
 || MVK Distance,DistP    ; 设置距离结果指针
 || STW A11,*+A9[4]     ; 保存寄存器
 || STW B11,*+B15[5]     ; 保存寄存器

 LDH *+MCurr0[3],Xs    ; 取Xs和Ys
 || LDH *+TT[2],Ys       
 || MVKH State,StateP       
 || MVKH Distance,DistP      
 
 LDH *+MCurr0[5],Xq    ; 取Xq和Yq 
 || LDH *+TT[4],Yq       
 
 LDH *+MCurr0[7],Nx    ; 取Nx和Ny 
 || LDH *+TT[6],Ny       
 || ZERO Ix      ; 初始化索引
 || ZERO Iy        
 || MVK 8,Cc      ; 初始化循环计数器
 
 STW A10,*+A9[2]     ; 保存寄存器 
 || STW B10,*+B15[3]     ; 保存寄存器 
 
 NOP 2         
 
Cloop: 
 CMPGT Xi,Xs,Xt     ; 比较和增加测试水平
 || ADD Xs,Xq,Xs       
 || CMPGT Yi,Ys,Yt       
 || ADD Ys,Yq,Ys       
 || LDW *MCurr0,MNext0    ; 为下一个循环准备
 || MV MCurr0,TT       
 
 .loop 4       ; 设置Max (Nx, Ny). 
 CMPGT Xi,Xs,Xt     ; 比较和增加测试水平

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -