[Assembly] Nhập và xuất số nguyên
[Assembly] Nhập và xuất số nguyên Tháng Chín 19, 2013 nguyenvanquan7826 LT Assembly 5 responses Trong Asm chỉ cung cấp các hàm nhập 1 chuỗi và nhập ký tự và muốn nhập 1 số có 2 chữ số trở lên cần phải xây dựng thủ tục riêng. ...
[Assembly] Nhập và xuất số nguyên
Trong Asm chỉ cung cấp các hàm nhập 1 chuỗi và nhập ký tự và muốn nhập 1 số có 2 chữ số trở lên cần phải xây dựng thủ tục riêng.
Thuật toán nhập số:
Tổng = 0 Nhập một chữ số ASCII từ bàn phím Repeat Đổi ký tự vừa nhập thành giá trị số (GTS) Tổng = tổng*10 + GTS Nhập tiếp ký tự số Until nhập ký tự Enter
Ví dụ mô tả thuật toán: Chẳng hạn chúng ta nhập số 123. Quá trình như sau:
Tổng = 0
Nhập ‘1’
Đổi ‘1’ → số 1
Tổng = 10*0 + 1
Nhập ‘2’
Đổi ‘2’ → số 2
Tổng = 10*1 + 2 = 12
Nhập ‘3’
Đổi ‘3’ → số 3
Tổng = 10*12 + 3 = 123
Thuật toán xuất số:
Giả sử trong AX có số 24168
chia 24168/10 được 2416 dư 8 chia 2416/10 được 241 dư 6 chia 241/10 được 24 dư 1 chia 24/10 được 2 dư 4 chia 2/10 được 0 dư 2 Viết ngược được 24168 Từ đây ta có thuật toán: đếm = 0 Repaet Chia số bị chia cho 10 Cất số dư vào ngăn xếp đếm = đếm +1 Until thương số = 0 For đếm do Lấy chữ số từ ngăn xếp Đổi ra ký tự Đưa ra màn hình End for
Code dưới đây gồm 2 hàm nhập số và xuất số nguyên từ -32768 đến 32767
.model small .stack 100 .data CLRF db 13, 10, '$' .code main proc mov ax, @data mov ds, ax call inputDec push ax ; luu Ax lai mov ah, 9 ; xuong dong lea dx, CLRF int 21h ; lay Ax ra pop ax call outputDec mov ah, 4ch int 21h main endp inputDec proc ; Vao: nhap vao so ; Ra: So luu trong Ax push bx push cx push dx batDau: mov ah, 2 xor bx, bx xor cx, cx mov ah, 1 int 21h cmp al, '-' je dauTru cmp al, '+' je dauCong jmp tiepTuc dauTru: mov cx, 1 dauCong: int 21h tiepTuc: cmp al, '0' jnge khongPhaiSo ; khong lop hon hoac bang cmp al, '9' jnle khongPhaiSo ; Khong nho hon hoac bang and ax, 000fh ; doi thanh chu so push ax ; cat vao ngan xep mov ax, 10 mul bx ; ax = tong*10 mov bx, ax pop ax add bx, ax ; tong = tong*10 + so mov ah, 1 int 21h cmp al, 13 ; da enter chua? jne tiepTuc ; nhap tiep mov ax, bx ; chuyen KQ ra ax or cx, cx ; co phai so am khong je ra neg ax ; neu la so am thi doi ax ra so am ra: pop dx pop cx pop bx ret khongPhaiSo: mov ah, 2 mov dl, 0dh int 21h mov dl, 0ah int 21 jmp batDau inputDec endp outputDec proc push bx push cx push dx cmp ax, 0 ; neu ax > 0 tuc la khong phai so am ta doi ra day jge doiRaDay push ax mov dl, '-' mov ah, 2 int 21h pop ax neg ax ; ax = -ax doiRaDay: xor cx, cx ; gan cx = 0 mov bx, 10 ; so chia la 10 chia: xor dx, dx ; gan dx = 0 div bx ; ax = ax / bx; dx = ax % bx push dx inc cx cmp ax, 0 ; kiem tra xem thuong bang khong chua? jne chia ; neu khong bang thi lai chia mov ah, 2 hien: pop dx or dl, 30h int 21h loop hien pop dx pop cx pop bx ;pop ax ret outputDec endp end main