1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202
| stack segment db 128 dup(0) stack ends
data segment msg1 db 'hello world!$' ; 定义一个字符串,表示“hello world!” msg2 db 'please input your name:$' ; 定义一个字符串,表示提示输入名字 msg3 db 'please input your id:$' ; 定义一个字符串,表示提示输入ID msg4 db 'please input a char:$' ; 定义一个字符串,表示提示输入一个字符 buffer db '$' ; 定义一个字符串,表示空字符串 data ends
code segment assume cs:code,ds:data
start: ; 将数据段地址赋值给AX mov ax,data ; 将AX的值赋值给DS mov ds,ax ; 将AX的值赋值给ES mov es,ax ; 显示“hello world!”字符串 lea dx, msg1 mov ah, 9 int 21h ;中断调用指令
; 回车换行 mov dl, 0Dh mov ah, 2 int 21h mov dl, 0Ah mov ah, 2 int 21h
; 提示输入名字 lea dx, msg2 mov ah, 9 int 21h
; 输入名字 lea dx, buffer mov ah, 0Ah mov al, 00h int 21h ; 清空缓冲区 xor bx,bx mov bl,buffer[1] mov buffer[bx+2],'$'
;换行 mov dl,0Dh mov ah,2 int 21h mov dl,0Ah mov ah,2 int 21h
;输出姓名 lea dx, offset [buffer+2] mov ah, 09h int 21h ;换行 mov dl,0Dh mov ah,2 int 21h mov dl,0Ah mov ah,2 int 21h
; 提示输入ID lea dx, msg3 mov ah,9 int 21h
; 提示输入ID的后续操作 lea dx,buffer mov ah,0Ah mov al,00h int 21h ;清空缓冲区 xor bx,bx mov bl,buffer[1] mov buffer[bx+2],'$'
;换行 mov dl,0Dh mov ah,2 int 21h mov dl,0Ah mov ah,2 int 21h
; 显示ID lea dx, offset [buffer+2] mov ah, 09h int 21h
cmpq: mov dl, 0Dh mov ah, 2 int 21h mov dl, 0Ah mov ah, 2 int 21h ; 显示提示输入字符的字符串 lea dx,msg4 mov ah,9 int 21h mov dl, 0Dh mov ah, 2 int 21h mov dl, 0Ah mov ah, 2 int 21h ;输入一个字符并回显 mov ah, 1 int 21h ;执行中断1
cmp al, 'q' ;若等于q,则跳转到ending je ending cmp al, 'Q' ;若等于Q,则跳转到ending je ending ;低八位存入bl mov bl, al ;高八位存入bh mov bh, al ;回车+换行 mov dl, 0Dh mov ah, 2 int 21h mov dl, bh mov ah, 2 int 21h mov dl, 9 mov ah, 2 and bl, 0F0h ;取bl高四位 mov cl, 4 ;右移4位,高4位变为低4位 shr bl, cl cmp bl, 9 ja alph1 ;处理数字 numb1: ;转换为ascii码 add bl, '0' mov dl, bl mov ah, 2 int 21h ;执行2号中断,显示输出 jmp low4 alph1: ;转换为ascii码 add bl, 37h mov dl, bl mov ah, 2 int 21h low4: and bh, 0Fh ;取低四位 cmp bh, 9 ja alph2 numb2: add bh, '0' ;加0 mov dl, bh mov ah, 2 int 21h jmp cmpq alph2: add bh, 37h ;加A mov dl, bh mov ah, 2 int 21h jmp cmpq ending: ;回车+换行 mov dl, 0Dh mov ah, 2 int 21h mov dl, 0Ah mov ah, 2 int 21h ;终止程序 mov ax, 4c00h int 21h code ends end start
|