运算符优先级 Ascii 查询

目录

本文内容摘自Linux Programmer’s Manua(Linux man 手册)

Ascii 码

可以使用 main ascii 在linux 操作系统中查询

ASCII(7)                   Linux Programmer's Manual                     ASCII(7)

NAME
       ascii - ASCII character set encoded in octal, decimal, and hexadecimal

DESCRIPTION
       ASCII  is  the American Standard Code for Information Interchange.  It is a 7-bit code.  Many 8-bit codes (e.g., ISO 8859-1) contain ASCII as their lower half.  The international coun
terpart of ASCII is known as
       ISO 646-IRV.

       The following table contains the 128 ASCII characters.

       C program '\X' escapes are noted.

       Oct   Dec   Hex   Char                        Oct   Dec   Hex   Char
       ────────────────────────────────────────────────────────────────────────
       000   0     00    NUL '\0' (null character)   100   64    40    @
       001   1     01    SOH (start of heading)      101   65    41    A
       002   2     02    STX (start of text)         102   66    42    B
       003   3     03    ETX (end of text)           103   67    43    C
       004   4     04    EOT (end of transmission)   104   68    44    D
       005   5     05    ENQ (enquiry)               105   69    45    E
       006   6     06    ACK (acknowledge)           106   70    46    F
       007   7     07    BEL '\a' (bell)             107   71    47    G
       010   8     08    BS  '\b' (backspace)        110   72    48    H
       011   9     09    HT  '\t' (horizontal tab)   111   73    49    I
       012   10    0A    LF  '\n' (new line)         112   74    4A    J
       013   11    0B    VT  '\v' (vertical tab)     113   75    4B    K
       014   12    0C    FF  '\f' (form feed)        114   76    4C    L
       015   13    0D    CR  '\r' (carriage ret)     115   77    4D    M
       016   14    0E    SO  (shift out)             116   78    4E    N
       017   15    0F    SI  (shift in)              117   79    4F    O
       020   16    10    DLE (data link escape)      120   80    50    P
       021   17    11    DC1 (device control 1)      121   81    51    Q
       022   18    12    DC2 (device control 2)      122   82    52    R
       023   19    13    DC3 (device control 3)      123   83    53    S
       024   20    14    DC4 (device control 4)      124   84    54    T
       025   21    15    NAK (negative ack.)         125   85    55    U
       026   22    16    SYN (synchronous idle)      126   86    56    V
       027   23    17    ETB (end of trans. blk)     127   87    57    W
       030   24    18    CAN (cancel)                130   88    58    X
       031   25    19    EM  (end of medium)         131   89    59    Y
       032   26    1A    SUB (substitute)            132   90    5A    Z
       033   27    1B    ESC (escape)                133   91    5B    [
       034   28    1C    FS  (file separator)        134   92    5C    \  '\\'
       035   29    1D    GS  (group separator)       135   93    5D    ]
       036   30    1E    RS  (record separator)      136   94    5E    ^
       037   31    1F    US  (unit separator)        137   95    5F    _
       040   32    20    SPACE                       140   96    60    `
       041   33    21    !                           141   97    61    a
       042   34    22    "                           142   98    62    b
       043   35    23    #                           143   99    63    c
       044   36    24    $                           144   100   64    d
       045   37    25    %                           145   101   65    e
       046   38    26    &                           146   102   66    f
       047   39    27    '                           147   103   67    g
       050   40    28    (                           150   104   68    h
       051   41    29    )                           151   105   69    i
       052   42    2A    *                           152   106   6A    j
       053   43    2B    +                           153   107   6B    k
       054   44    2C    ,                           154   108   6C    l
       055   45    2D    -                           155   109   6D    m
       056   46    2E    .                           156   110   6E    n
       057   47    2F    /                           157   111   6F    o

       060   48    30    0                           160   112   70    p
       061   49    31    1                           161   113   71    q
       062   50    32    2                           162   114   72    r
       063   51    33    3                           163   115   73    s
       064   52    34    4                           164   116   74    t
       065   53    35    5                           165   117   75    u
       066   54    36    6                           166   118   76    v
       067   55    37    7                           167   119   77    w
       070   56    38    8                           170   120   78    x
       071   57    39    9                           171   121   79    y
       072   58    3A    :                           172   122   7A    z
       073   59    3B    ;                           173   123   7B    {
       074   60    3C    <                           174   124   7C    |
       075   61    3D    =                           175   125   7D    }
       076   62    3E    >                           176   126   7E    ~
       077   63    3F    ?                           177   127   7F    DEL

   Tables
       For convenience, below are more compact tables in hex and decimal.

          2 3 4 5 6 7       30 40 50 60 70 80 90 100 110 120
        -------------      ---------------------------------
       0:   0 @ P ` p     0:    (  2  <  F  P  Z  d   n   x
       1: ! 1 A Q a q     1:    )  3  =  G  Q  [  e   o   y
       2: " 2 B R b r     2:    *  4  >  H  R  \  f   p   z
       3: # 3 C S c s     3: !  +  5  ?  I  S  ]  g   q   {
       4: $ 4 D T d t     4: "  ,  6  @  J  T  ^  h   r   |
       5: % 5 E U e u     5: #  -  7  A  K  U  _  i   s   }
       6: & 6 F V f v     6: $  .  8  B  L  V  `  j   t   ~
       7: ' 7 G W g w     7: %  /  9  C  M  W  a  k   u  DEL
       8: ( 8 H X h x     8: &  0  :  D  N  X  b  l   v
       9: ) 9 I Y i y     9: '  1  ;  E  O  Y  c  m   w
       A: * : J Z j z
       B: + ; K [ k {
       C: , < L \ l |
       D: - = M ] m }
       E: . > N ^ n ~
       F: / ? O _ o DEL

运算符

可以使用 man operator 在 linux 操作系统中查询

OPERATOR(7)                 Linux Programmer's Manual                 OPERATOR(7)

NAME
       operator - C operator precedence and order of evaluation

DESCRIPTION
       This manual page lists C operators and their precedence in evaluation.

       Operator                             Associativity
       () [] -> .                           left to right
       ! ~ ++ -- + - (type) * & sizeof      right to left
       * / %                                left to right
       + -                                  left to right
       << >>                                left to right
       < <= > >=                            left to right
       == !=                                left to right
       &                                    left to right
       ^                                    left to right
       |                                    left to right
       &&                                   left to right
       ||                                   left to right
       ?:                                   right to left
       = += -= *= /= %= <<= >>= &= ^= |=    right to left
       ,                                    left to right
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是一个比较复杂的项目,需要涉及到字符串处理、表达式求值等多个方面的知识。下面是一个基本的实现思路,可能还需要进行一些调试和优化。 1. 读取用户输入的表达式字符串,可以使用 DOS 中断 21h 的 0Ah 功能。 2. 将字符串解析为数字和运算符,可以使用字符串处理函数和 ASCII 码表。 3. 检查表达式的合法性,例如检查是否有非法字符、是否符合运算符优先级等。 4. 根据运算符优先级,使用栈进行表达式求值,可以使用汇编语言中的栈操作指令。 5. 输出计算结果或错误提示信息。 6. 循环执行上述步骤,直到用户输入 Q 或 q。 以下是一个基本的伪代码实现: ``` ; 定义数据段 data segment stack dw 100 dup(0) ; 定义栈,存储数字 top dw 0 ; 栈顶指针 num1 dw 0 ; 第一个操作数 num2 dw 0 ; 第二个操作数 op db 0 ; 运算符,使用 ASCII 码表示 result dw 0 ; 计算结果 buffer db 20 dup(0) ; 输入缓冲区 prompt db 'Please input an expression: $' ; 提示信息 error db 'Error$' ; 错误提示信息 quit db 'Q'$ ; 退出命令 data ends ; 定义代码段 code segment assume cs:code, ds:data start: ; 初始化栈指针 mov ax, 0 mov ds:top, ax ; 输出提示信息 mov ah, 9 lea dx, prompt int 21h ; 读取用户输入的表达式 mov ah, 0Ah lea dx, buffer int 21h ; 解析表达式 lea si, buffer mov ax, ds:num1 mov bx, ds:num2 mov cl, 0 ; 运算符优先级 parse: ; 解析下一个数字或运算符 mov al, [si] cmp al, '=' je calc ; 如果是等号,跳转到计算阶段 cmp al, '+' je addop ; 如果是加法运算符,跳转到加法处理 cmp al, '-' je subop ; 如果是减法运算符,跳转到减法处理 cmp al, '*' je mulop ; 如果是乘法运算符,跳转到乘法处理 cmp al, '/' je divop ; 如果是除法运算符,跳转到除法处理 cmp al, '0' jb error ; 如果是非法字符,跳转到错误处理 cmp al, '9' ja error ; 如果是非法字符,跳转到错误处理 sub al, '0' ; 将 ASCII 码转换为数字 mov bx, ax ; 将数字保存到第二个操作数寄存器 ; 检查是否有下一个字符 inc si cmp [si], 0 jne parse ; 如果还有下一个字符,继续解析 ; 计算表达式的值 calc: ; 如果栈为空,直接保存第二个操作数 cmp ds:top, 0 jne stackop mov ds:num1, bx jmp output ; 如果栈不为空,根据运算符优先级进行计算 stackop: mov ax, ds:num1 mov cl, ds:op cmp cl, '*' je mulstack cmp cl, '/' je divstack cmp cl, '+' je addstack cmp cl, '-' je substack ; 如果运算符优先级不对,直接输出错误信息 error: mov ah, 9 lea dx, error int 21h jmp start ; 加法处理 addop: mov ds:op, '+' jmp parse addstack: pop ax add ds:num2, ax dec ds:top jmp stackop ; 减法处理 subop: mov ds:op, '-' jmp parse substack: pop ax sub ds:num2, ax dec ds:top jmp stackop ; 乘法处理 mulop: mov ds:op, '*' jmp parse mulstack: pop ax imul ds:num2, ax dec ds:top jmp stackop ; 除法处理 divop: mov ds:op, '/' jmp parse divstack: pop ax cwd ; 将 AX 扩展为 DX:AX idiv ds:num2 mov ds:num2, ax dec ds:top jmp stackop ; 输出计算结果或错误信息 output: mov ax, ds:num1 mov bx, ds:num2 mov cl, ds:op cmp cl, '+' je addresult cmp cl, '-' je subresult cmp cl, '*' je mulresult cmp cl, '/' je divresult jmp error ; 如果没有运算符,说明表达式非法 addresult: add ax, bx mov ds:result, ax jmp printresult subresult: sub ax, bx mov ds:result, ax jmp printresult mulresult: imul ax, bx mov ds:result, ax jmp printresult divresult: cwd ; 将 AX 扩展为 DX:AX idiv bx mov ds:result, ax jmp printresult printresult: mov ah, 2 mov dl, ' ' int 21h ; 输出空格 mov ah, 2 mov bx, ds:result call printnum ; 输出计算结果 mov ah, 2 mov dl, '$' int 21h ; 输出换行符 jmp start ; 打印数字 printnum: push ax push cx push dx mov cx, 0 ; 计算数字位数 mov dx, 1 ; 计算数字的最高位 mov ax, bx cmp ax, 0 jge numloop mov ah, 2 mov dl, '-' int 21h ; 如果是负数,输出符号 neg ax ; 取反 numloop: inc cx cmp ax, 0 je printloop imul dx, 10 ; 计算下一位的权值 mov bx, dx mov dx, 0 div bx ; 除以权值,得到当前位的数字 push dx ; 将当前位的数字保存到栈中 jmp numloop printloop: pop dx ; 从栈中取出数字位 add dl, '0' ; 将数字转换为 ASCII 码 mov ah, 2 mov dl, dl int 21h ; 输出数字 loop printloop pop dx pop cx pop ax ret ; 处理退出命令 cmp [si], 'q' je quit cmp [si], 'Q' je quit jmp start quit: ; 退出程序 mov ah, 4Ch int 21h code ends end start ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值